我想知道TypeScript 3中到底是否有办法迭代接口/类属性,然后将其名称添加到数组中?类似于keyof,但是在运行时。
进行迭代的接口示例:
interface MyInterface {
first: string;
second: string;
}
答案 0 :(得分:0)
类型系统在运行时完全为erased,因此没有MyInterface
可以迭代。这是by design(请参阅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>;
希望对您有帮助。祝你好运!