在TypeScript中键入`this`

时间:2014-04-22 16:26:15

标签: typescript

有没有办法在TypeScript中设置this的类型?

我确定它有很多用途,但在我的特殊情况下,它可以输入JS库,并为其编写插件。

例如:

// Some library
declare var SomeLib: sl.ISomeLibStatic;
declare module sl {
    interface ISomeLib extends ISomeLibApi {
        baseFn(): void;
    }

    interface ISomeLibStatic {
        new (): ISomeLib;
        API: ISomeLibApi;
    }

    interface ISomeLibApi {
    }
}

// Plugin file
declare module sl {
    // Extend the API signature declaration
    interface ISomeLibApi {
        extraFn(): void;
    }
}

module sl {
    // Implement the function
    SomeLib.API.extraFn = function () {
        // Get typing on this here
        this.baseFn();
    };
}

任何人都知道如何在没有变量的情况下执行此操作:var typedThis: ISomeLib = this;

目前我找到的唯一方法就是在每次使用<ISomeLib>this时使用它,这很麻烦,而且没有在函数类型中定义。

2 个答案:

答案 0 :(得分:0)

没有办法向语言服务提示要应用于该功能的上下文。

唯一能够干净地提供类型检查和自动完成而不会导致运行时伪影的机制是:

(<ISomeLib>this).baseFn();

编译到所需的:

this.baseFn();

答案 1 :(得分:0)

可以按照以下方式完成:

function foo(this: MyType) { 
}

您还可以使用this: this强制在声明上下文中调用函数,或this: void以防止使用此函数。

但是,此功能的目标版本是TypeScript 2.0(尽管它已在最新的开发中实现)。

有关详细信息,请参阅here