如何在NgRx createAction属性<>()中使用泛型类型 [英] How to use Generic Type in NgRx createAction props<>()

查看:13
本文介绍了如何在NgRx createAction属性<>()中使用泛型类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个NgRx操作创建器工厂。但我不知道如何将泛型类型传递给props方法。

import { createAction, props } from "@ngrx/store";

function actionFactory<T>(name: string) {
  return createAction(name, props<T>());
//                          ^^^^^^^^^^
}

它引发此错误

Type 'Props<T>' provides no match for the signature '(...args: any[]): object'

如何修改工厂方法以将泛型类型传递到props方法中?:

const action = actionFactory<{ id: string }>("sample");

您可以在Stackblitz

上亲自试用

推荐答案

由于某些原因,似乎@ngrx/store阻止了使用空对象创建操作。以下是符合@ngrx/store要求并使操作完全类型化的可能解决方案:

import { createAction, props, Props, NotAllowedCheck } from "@ngrx/store";

// T extends object meets the condition of props function
function actionFactory<T extends object>(name: string) {
  // restricting config type to match createAction requirements
  return createAction(name, props<T>() as Props<T> & NotAllowedCheck<T>);
}

// ok
const action = actionFactory<{ id: string }>("sample");

// empty object picked up on type level
const emptyAction = actionFactory<{}>("sample");
emptyAction({}); // error as expected properly

STACKBLITZ

这篇关于如何在NgRx createAction属性&lt;&gt;()中使用泛型类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆