如何使用`keyof`创建地图

时间:2017-04-14 21:45:48

标签: javascript typescript

说我有以下界面

interface User {
    name: string;
    age: number;
    address: string;
    id: number;
}

我想获取界面的键,以便我可以创建它的枚举/映射,即

// somehow create `map` 
// map.name should be 'name'
// map.age should be 'age'

1 个答案:

答案 0 :(得分:0)

由于编译时存在User接口,因此不能将该信息用作运行时映射对象。但是,您可以进行相反的操作。

首先创建一个地图对象作为User的模板:

const userTemplate = {
    name: '',
    age: 0,
    address: '',
    id: 0
};

现在,您可以在模板上使用interface User来推断typeof类型,而不是写出User

type User = typeof userTemplate; 
// equivalent to:
// type User = { name: string; age: number; address: string; id: number; }

您可以获取密钥并将其存储在运行时数组中:

const userKeys = Object.keys(userTemplate);
// ['name', 'age', 'address', 'id']

您还可以在编译时创建键的联合类型:

type UserKey = keyof User;
// equivalent to:
// type UserKey = 'name' | 'age' | 'address' | 'id'

Try it in TypeScript Playground