我正在Typescript中运行一些测试,看看我想做的东西是否可行。我需要在一个函数中把'this'的类型设置为一个类;它可以工作,但是,我一直得到错误。类型为'void'的'this'上下文不可分配给类型为'Rule'的方法'this'。以下是代码。
TLDR如何在一个独立的函数里面指定这个类型?
PS 也许有更好的方法,所以我将解释我正在尝试做什么。我想做的是创建一个规则类,我在其中添加一个函数,要么返回true,要么返回false,如果返回true,则返回注释以及一个状态。我不希望这个函数有一堆参数。我希望这个类能够与其他类进行交互,并能够访问其他数据,但对于测试目的来说,它是独立的。
export class Rule {
constructor(rule) {
this.Fx = rule
}
Fx;
passNote;
failNote;
guest;
apiData;
runRule(dev) {
this.Fx(dev)
}
}
function apple(this: Rule, dev) {}
const test = new Rule((dev) => dev.pass)
const dev = // large object I am testing with the rule
test.runRule(dev)
// The 'this' context of type 'void' is not assignable to method's 'this' of type 'Rule'
我想要的只是在编写函数时,我在构造函数中使用的'this'的intelisence。
你可以 .call
苹果。
apple.call(new Rule, 'poop');
我不太清楚你想用这个来达到什么目的 apple
函数,但这与以下方式有关 this
装订工作。我建议多读一些这方面的书 此处但当你正常调用一个函数时(就像你的代码中那样),你的 this
context指的是在非严格模式下的全局范围,而 undefined
当在严格模式下,你的TypeScript代码很可能在严格模式下编译成JavaScript。你的TypeScript代码很可能在严格模式下编译成JavaScript,所以这个错误是想告诉你这个 undefined
值不属于 Rule
. 如果你想 this
来引用一个类对象的实例,你可以把它赋值给对象,然后通过对象绑定来调用它,而不是直接调用函数。
function apple(this: Rule, dev) {}
export class Rule {
constructor() {}
Fx;
passNote;
failNote;
guest;
apiData;
apple = apple;
};
const rule = new Rule();
rule.apple('test'); // now the this keyword will refer to the Rule object you instantiated
或者,你可以直接把对象传递给函数的 apple
函数作为自己的参数,而不是试图使用 this
. 因为使用 this
关键字可以是当你不完全了解它的工作原理时,我推荐这种方法。
const rule = new Rule();
function apple(rule: Rule, dev) {}
apple(rule, 'test');