如何为Map对象编写TypeScript`get`函数?

时间:2018-10-11 20:52:33

标签: typescript

是否可以在TypeScript中执行类似的操作?

interface IPerson {
  name: string;
  age: number;
}

declare class Map<T> {
  get(name: keyof T): any // ? return type
}

我需要的结果

const map = new Map<IPerson>();
map.get("name"); // string
map.get("age"); // number

1 个答案:

答案 0 :(得分:2)

name参数是扩展keyof T的泛型,然后您的返回类型可以使用该索引来索引T以获取正确的类型。 EG:

interface IPerson {
  name: string;
  age: number;
}

declare class MyMap<T> {
  get<K extends keyof T>(name: K): T[K]
}

// Result I need

const map = new MyMap<IPerson>();
map.get("name"); // string
map.get("age"); // number

P.S。考虑将类命名为Map以外的名称,因为它很容易与内置javascript Map对象混淆,并且会与TypeScript的Map的内置类型冲突(如果存在)。