【发布时间】:2018-02-17 01:55:35
【问题描述】:
我想要一个函数返回一个与泛型类型参数类型具有相同属性名称的类型。
我试过了:
function getObjectInfo<T>(obj: T): { [key: keyof T]: any; } {
const info = {};
Object.getOwnPropertyNames(obj).forEach(propertyName => {
info[propertyName] = { /* some info object */ };
});
return info;
}
和
function getObjectInfo<T, K extends keyof T>(obj: T): { [key: K]: any; } {
const info = {};
Object.getOwnPropertyNames(obj).forEach(propertyName => {
info[propertyName] = { /* some info object */ };
});
return info;
}
但出现以下错误
索引签名参数类型不能是联合类型。考虑改用映射对象类型。
更新:
也试过了:
function getObjectInfo<T extends { [key: string]: any }, K extends keyof T>(obj: T): { [key: K]: any; } {
const info = {};
Object.getOwnPropertyNames(obj).forEach(propertyName => {
info[propertyName] = { /* some info object */ };
});
return info;
}
所以 K 不是联合类型但仍然得到相同的错误
【问题讨论】:
标签: typescript generics