【发布时间】:2018-05-15 23:53:17
【问题描述】:
我正在尝试创建一个对象类型来定义另一种类型的值。
我本来就有这个:
export interface Obj {
[key: string]: any
}
我现在想将其更改为包含其他类型的项目列表。我尝试了以下方法,但出现错误:
索引签名参数类型不能是联合类型。考虑改用映射对象类型。
type ListOfMethods = {
one(): void
two(): void
}
export interface Obj {
[key: keyof ListOfMethods]: any
}
所以我尝试了这个错误:
[key in keyof ListOfMethods]: any
现在得到这个错误
计算属性名称的类型必须为“字符串”、“数字”、“符号”或“任意”。
【问题讨论】:
-
type = ListOfMethods必须是type ListOfMethods:) -
已修复,这是一个错字:)
-
在实际代码中,
ListOfMethods类型只是传递给addEventListener的事件列表,其中名称是键,函数是事件,所以如果有内置方式将这些名称列为函数......那会很好...... -
type names = "one" | "two" | "three";然后{[key in names]: () => void} -
@JonasW。这个对吗?
export interface Obj {[key in names]: () => void}?如果是这样,我会收到错误消息:'Obj' only refers to a type, but is being used as a value here.
标签: javascript typescript typescript-typings