我有一个这样的函数调用:
var myVar = myFunction({
property: 'prop',
functionProperty() {
console.log(this.property);
},
functionProperty2() {
this.functionProperty();
}
});有没有办法向传递给函数的对象添加类型,而不需要先声明它?
另一个问题是,有没有办法让this.functionProperty()知道这指的是对象?在悬停时使用VSCode,它不会将关键字this识别为对象。
发布于 2018-08-29 20:32:41
如果您使用编译器选项noImplicitThis,那么this将在您的对象文字函数中正确键入。
function myFunction<T>(o: T) {
}
var myVar = myFunction({
property: 'prop',
functionProperty() {
console.log(this.property);
},
functionProperty2() {
this.functionProperty();
this.missing // error
}
});如果您需要更多地控制this的类型,您可以使用ThisType,这是编译器的一个特殊标记,它将告诉编译器在对象文字函数中this的类型是什么(但这也需要noImplicitAny)。
function myFunction<T>(o: T & ThisType<T & { extra: boolean }>) {
}
var myVar = myFunction({
property: 'prop',
functionProperty() {
console.log(this.property);
},
functionProperty2() {
this.functionProperty();
this.missing // error
this.extra //ok
}
});https://stackoverflow.com/questions/52076793
复制相似问题