我做了一些搜索,但无法找到任何确凿的我的问题。对不起,如果这是一个重复,我会很高兴,如果你重定向我。
我的问题是我为我正在做的项目写了一个store类。它有一个像这样的函数:
public getStore(store: 'FIELD1' | 'FIELD2'): State<typeof store> {
return this[store];
}
与文件中相应的条件类型:
export type State<T> = T extends 'FIELD1'
? Field1Type[]
: T extends 'FIELD2'
? Date
: never;
我期望这会导致在我编写getStore('FIELD1').length
时,返回值可以是Field1Type[] | Date
的编译消息,但它没有。
这对我来说很不方便,因为我正在编写一个Angular应用程序,并希望在组件的HTML中调用它,而不需要在组件的脚本中使用helper。
这是正常的,还是我做错了什么?
1条答案
按热度按时间b4lqfgs41#
正如目前所写的,你的方法返回一个
Date | Field1Type[]
的联合。联合类型意味着该方法可以返回Date
或Field1Type[]
,而不考虑输入,因此不允许访问length
属性。您应该考虑使用重载来将返回类型与输入相关联:
如果依赖于泛型类型
State
的实现,也可以在这里使用它。您还应该考虑将
State
的实现替换为更简单的类似于map的结构: