ngrx选择字符串是类型吗?

时间:2018-12-07 20:49:33

标签: angular typescript ngrx ngrx-store

我想说我在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”类型如何?为什么编译器将字符串文字作为类型?

1 个答案:

答案 0 :(得分:2)

它将其推断为存储对象类型上的键,并可以由此推断出值类型。例如,您可以定义一个通用函数:

const getKey = <T>(obj: T, key: keyof T) => obj[key] ;

如果key不是T的键,它将正确地推断返回类型并给出编译器错误。您可以将函数的返回值显式键入为T [keyof T]。 Typescript泛型和类型推断功能异常强大。