'这个'上下文类型void不可分配给类型规则是什么意思?

问题描述 投票:0回答:1

我正在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。

javascript typescript
1个回答
2
投票

你可以 .call 苹果。

 apple.call(new Rule, 'poop');

2
投票

我不太清楚你想用这个来达到什么目的 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');
© www.soinside.com 2019 - 2024. All rights reserved.