我想说我在Typescript和Angular(包括ngrx)方面都处于初学者水平。
我正在努力解决 Store 类的 select 方法如何接受字符串文字作为参数的问题。这是代码:
export interface AppState {
readonly tutorial: Tutorial[];
}
export class ReadComponent {
constructor(private store: Store<AppState>) {
this.tutorials = store.select('tutorial');
}
}
现在,我看到 AppState 类具有tutorial属性,这似乎就是调用store.select('tutorial')的用途,但是怎么办?如果我更改要传递的文字以选择ex怎么办。 store.select('yadayada'),编译器会发出错误无法将类型为“ yadayada”的参数分配给类型为“ tutorial”的参数。 “ tutorial”和“ yadayada”类型如何?为什么编译器将字符串文字作为类型?
答案 0 :(得分:2)
它将其推断为存储对象类型上的键,并可以由此推断出值类型。例如,您可以定义一个通用函数:
const getKey = <T>(obj: T, key: keyof T) => obj[key] ;
如果key不是T的键,它将正确地推断返回类型并给出编译器错误。您可以将函数的返回值显式键入为T [keyof T]。 Typescript泛型和类型推断功能异常强大。