输入
const obj = {
foo: function() {
this.car = 4;
this.can("far");
},
bar: function() {
this.caz = ["fa", "ba"];
this.car = 7;
}
}尝试
interface IObj {
[index: string]: IObjVar;
}
interface IObjVar {
car?: number;
can(arg: string)?: void;
caz?: string[];
}然而,这不能带来代码完成。我想输入car/can/caz和this.来显示。
发布于 2015-10-04 10:55:07
你所要求的东西是不可能的,除非第3694期是固定的。函数中不属于类声明的this的类型始终是any。最好的方法是将this化名为具有正确类型的其他变量:
const obj = {
foo: function() {
const self: IObjVar = this;
self.car = 4;
self.can("far");
},
bar: function() {
const self: IObjVar = this;
self.caz = ["fa", "ba"];
self.car = 7;
}
};或者您可以始终显式地转换this。
const obj = {
foo: function() {
(<IObjVar> this).car = 4;
(<IObjVar> this).can("far");
},
bar: function() {
(<IObjVar> this).caz = ["fa", "ba"];
(<IObjVar> this).car = 7;
}
};发布于 2015-10-05 01:21:25
如果您想变得有点枯燥(不要重复),可以使用type声明来捕获变量的类型。样本:
const obj = {
foo: function() {
let self: ObjType = this;
self.car = 4;
self.can("far");
},
bar: function() {
let self: ObjType = this;
self.caz = ["fa", "ba"];
self.car = 7;
},
car: 123,
caz: [],
can: function(x:string){}
}
type ObjType = typeof obj;https://stackoverflow.com/questions/32932425
复制相似问题