Машинопись, как определить свойство как список ключей общего параметра T своего класса? - PullRequest
0 голосов
/ 23 января 2019
class A<T> {
    fields: Array<???>;
}

Я хочу, чтобы поля содержали список свойств T.Я пробовал A<T, K extends keyof T>, но тогда мне нужно предоставить два параметра при наследовании в подклассе B extends A<C, ???>.Я пытался переместить это type K extends/= keyof T в тело класса, но оно не распознается Typescript.

Q: Что такое правильная аннотация типа для списка параметров класса переменной типабыл параметризован параметром?

PS A никогда не будет создан напрямую, а вместо этого будет наследоваться после (например, class B extends A<C> ..., а затем в этих подклассах будет заполнено fields)

1 Ответ

0 голосов
/ 23 января 2019

Нашел одно решение:

type KeysOf<T1> = keyof T1;

class A<T2> {
    fields: Array<KeysOf<T2>>;

Пожалуйста, обратите внимание, что эти два T разные, просто мое соглашение. KeysOf является универсальным по типу, который он описывает. Это позволяет мне позже передать T, с которым мой класс параметризован.

Обратите внимание, я должен был объявить этот псевдоним типа вне тела класса, так как Typescript отказался компилировать иначе.

Обратите внимание, type поддерживает дженерики только из определенной версии языка машинописи, поэтому в старых версиях трюк может не работать.

...