小编Stu*_*art的帖子

如何为映射类型添加索引签名?

假设我有界面

interface X {
   a: string;
   b: number;
   c: boolean;
}
Run Code Online (Sandbox Code Playgroud)

和一个功能

function values(x: X) {
   return Object.keys(x).map(s => x[s])
}
Run Code Online (Sandbox Code Playgroud)

当我启用typescript的strict标志时,我得到错误"元素隐式具有'任何'类型,因为类型'X'没有索引签名".因此,为了使其明确,我可以只为X的定义添加索引签名

[key: string]: any;
Run Code Online (Sandbox Code Playgroud)

十分简单.


但是,如果IX现在是映射类型,则:

type X<T> = {
  [P in keyof T]: string;
}
Run Code Online (Sandbox Code Playgroud)

我有这个功能

function values<T>(x: X<T>) {
  return Object.keys(x).map(s => x[s])
}
Run Code Online (Sandbox Code Playgroud)

我应该在哪里添加索引签名?有没有办法让这个明确,而不诉诸做一些粗略的事情Object.keys(x).map(s => (x as any)[s])

typescript mapped-types index-signature

11
推荐指数
1
解决办法
3185
查看次数

标签 统计

index-signature ×1

mapped-types ×1

typescript ×1