如何在NgRx createAction属性<;>;()中使用泛型类型 [英] How to use Generic Type in NgRx createAction props<>()
本文介绍了如何在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
这篇关于如何在NgRx createAction属性<;>;()中使用泛型类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文