TypeScript的ThisType用作什么?

时间:2019-03-06 17:33:09

标签: typescript

TypeScript带有接口ThisType。我找不到有关它的大量文档,所以我想知道:它的用途是什么?如何使用?如何运作?

1 个答案:

答案 0 :(得分:1)

ThisType在此处记录:https://www.typescriptlang.org/docs/handbook/utility-types.html#thistypet(感谢@axiac在评论中将其链接)

但是,文档使用的示例让我有些困惑。这是我发现思考的最简单方法:

如果将& ThisType<WhateverYouWantThisToBe>添加到对象的类型,则该对象内的函数将以WhateverYouWantThisToBe作为this的类型。如果您无法通过正常的TypeScript机制指定this应该是什么(不是class等),这将很有帮助

如果我们想象一个世界,我们正在编写一些代码,这些代码注册了一些辅助函数,则可以这样编写:

interface HelperThisValue {
    logError: (error: string) => void;
}

let helperFunctions: { [name: string]: Function } & ThisType<HelperThisValue> = {
    hello: function() {
        this.logError("Error: Something went wrong!"); // TypeScript successfully recognizes that "logError" is a part of "this".
        this.update(); // TS2339: Property 'update' does not exist on HelperThisValue.
    }
}

registerHelpers(helperFunctions);

正如我在上面的注释中所指出的那样,TypeScript现在知道正确的类型,并且如果我们滥用它将会给出错误。

请注意,与所有TypeScript的键入一样,使用ThisType对生成的JavaScript代码没有影响。在其他地方必须有代码来确保在调用helperFunctions的成员时,设置了正确的this值(例如,通过使用Function.bindFunction.apply,{{1 }}等)