ngrx выберите строки типа? - PullRequest
0 голосов
/ 07 декабря 2018

Я хотел бы сказать, что я на уровне новичка как в Typescript, так и в Angular (включая ngrx).

Я пытаюсь обернуть голову, как выбирает метод класса Store может принимать строковый литерал в качестве параметра.Вот код:

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" * .Каковы типы "учебник" и "yadayada"?Почему компилятор принимает строковый литерал в качестве типа?

1 Ответ

0 голосов
/ 08 декабря 2018

Он выводит его как ключ к типу объекта хранилища и может выводить тип значения из этого.Например, вы можете определить обобщенную функцию:

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

Она будет правильно выводить тип возвращаемого значения и выдаст ошибку компилятора, если ключ не является ключом T. Вы можете явно ввестивозвращаемое значение функции как T [keyof T].Обобщения и вывод типов являются безумно мощными.

...