是否可以定义一个函数wrap
使其起作用?:
function wrap<Self>(
creator: (self: Self) => Self
) {}
wrap(self => ({
val: 2,
func(): number {
return self.val;
}
}));
实际上是TypeScript在return self.val;
处报错:
类型“ {}”上不存在属性“ val”。
我希望wrap
的定义方式可以推断self
的类型与函数的返回值相同。
答案 0 :(得分:0)
问题在于Self
只是一个泛型。编译器无法知道由Self
表示的对象具有val
属性(甚至根本没有任何属性;就其所知,它们只是{}
类型)。
让它知道对Self
会有什么期望:
interface HasVal {
val: any;
}
function wrap<Self extends HasVal>(
creator: (self: Self) => Self
) {}
wrap(self => ({
val: 2,
func(): number {
return self.val;
}
}));