是否可以在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
答案 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
的内置类型冲突(如果存在)。