遍历接口/类属性,并将它们添加到数组中-TypeScript 3

时间:2019-03-22 23:25:34

标签: typescript generics iteration runtime

我想知道TypeScript 3中到底是否有办法迭代接口/类属性,然后将其名称添加到数组中?类似于keyof,但是在运行时。

进行迭代的接口示例:

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

1 个答案:

答案 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>;

希望对您有帮助。祝你好运!