【发布时间】:2018-05-07 23:11:44
【问题描述】:
假设我有接口
interface X {
a: string;
b: number;
c: boolean;
}
还有一个函数
function values(x: X) {
return Object.keys(x).map(s => x[s])
}
当我启用 typescript 的 strict 标志时,我收到错误消息“元素隐式具有 'any' 类型,因为类型 'X' 没有索引签名”。因此,为了明确起见,我可以在 X 的定义中添加一个索引签名
[key: string]: any;
简单易懂。
但是,如果 I X 现在改为映射类型:
type X<T> = {
[P in keyof T]: string;
}
我有这个功能
function values<T>(x: X<T>) {
return Object.keys(x).map(s => x[s])
}
我应该在哪里添加索引签名?有什么办法可以在不诉诸诸如Object.keys(x).map(s => (x as any)[s]) 之类的粗俗行为的情况下明确这一点
【问题讨论】:
标签: typescript mapped-types index-signature