如果我在模块中具有函数,则M['A'] = pd.DataFrame(X1[' Time (ms) '])
M['B'] = pd.DataFrame(X2[' Time (ms) '])
M['C'] = pd.DataFrame(X3[' Time (ms) '])
M['D'] = pd.DataFrame(X4[' Time (ms) '])
允许我执行类似TypeScript
的操作(其中this.unexistingFunction();
不存在)。发生这种情况是因为unexistingFunction
在函数内部具有类型this
。
那是为什么?在这种情况下,没有理由将anỳ
键入为any,这很容易出错。例如,如果我不小心键入this
而不是仅仅this.myFunction();
来调用局部函数,即使显然myFunction();
不存在,编译器也会允许我这样做。
答案 0 :(得分:1)
您可以启用--noImplicitThis true
选项来限制this
类型的any
(不允许使用this:any
)
示例:
class Rectangle {
//private w: number; //uncomment this line
//private h: number; //uncomment this line
constructor(w, h) {
this.w = w;
this.h = h;
}
getAreaFunction() {
return () => {
return this.w * this.h;
};
}
}
let rectangle = new Rectangle(2, 5);
let areaFunction = rectangle.getAreaFunction();
let area = areaFunction();
console.log(area);
注意:使用 tsc --noImplicitThis
答案 1 :(得分:0)
这可能是因为您没有bind
您的功能。
在JS和TypeScript中,this
的值由调用者而不是声明者确定。
意思是,如果您在对象之间传递了回调,例如:
const a = {
a: function() {console.log(this)}
}
const b = {
b: a.a
}
b.b(); // `this` inside the function will be the instance of `b`, not `a` where it was declared.
这将导致TypeScript编译器无法知道在编译时将在何处调用该函数,因此它无法提供类型信息。
要解决此问题,您应该bind
函数:
class a {
constructor() {
a = a.bind(this);
}
/* rest of class */
}
或使用箭头功能:
class a {
const a = () => {};
}
会自动绑定到正确的上下文。