TypeScript带有接口ThisType
。我找不到有关它的大量文档,所以我想知道:它的用途是什么?如何使用?如何运作?
答案 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.bind
,Function.apply
,{{1 }}等)