Переберите свойства интерфейса / класса и добавьте их в массив - TypeScript 3 - PullRequest
0 голосов
/ 23 марта 2019

Мне интересно, есть ли в итоге способ в TypeScript 3 иметь возможность перебирать свойства интерфейса / класса и затем добавлять их имена в массив?Что-то вроде keyof, но во время выполнения.

Пример интерфейса для итерации:

interface MyInterface {
    first: string;
    second: string;
}

1 Ответ

0 голосов
/ 23 марта 2019

Система типов полностью стирается во время выполнения, так что нет ничего, что MyInterface осталось бы перебрать.Это по замыслу (см. Нецелевая цель TypeScript # 5).Таким образом, ответ на ваш вопрос: «Вы не можете этого сделать, извините».

Что вы можете сделать, это начать с чего-то, что определенно будет существовать во время выполнения, например

const myObject = {first: "1", second: "2"};

, а затем позвольте компилятору вывести тип для этого объекта и использовать этот тип для определения типов, которые вам нужны:

type MyType = typeof myObject;
interface MyInterface extends MyType {};

Приведенный выше MyInterface точно такой же, как ваше первоначальное определение, но теперь у вас есть объект времени выполнения myObject, который вам нужно перебрать:

// type assertion needed because Object.keys() returns string[] on purpose
const myInterfaceKeys = Object.keys(myObject) as Array<keyof MyInterface>;

Надеюсь, что вам это поможет.Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...