类型定义,如果调用的函数污染全局命名空间

时间:2016-04-05 00:34:51

标签: typescript

我们假设我们有一个普通的javascript构造函数,它具有一个名为extend的静态属性。如果我们将一个字符串传递给这个方法(extend),它将在窗口对象上创建一个新的构造函数。

以下是该实现:https://canjs.com/docs/can.Construct.extend.html

这是我的类型定义:

declare module "can/construct/" {

    interface ConstructFactory {
        new(): Construct;
    }

    class Construct {
        constructor();
        static extend(name: string): ConstructFactory;
        static extend(name: string, staticProperties: {}): ConstructFactory;
        static extend(name: string, staticProperties: {}, instanceProperties: {}): ConstructFactory;
        static extend(staticProperties: {}, instanceProperties: {}): ConstructFactory;
        static extend(instanceProperties: {}): ConstructFactory;
    }
}

我的打字稿文件如下:

import {Construct} from "can/construct/";
Construct.extend('Foo');
let foobar = new Foo();

但我收到一个错误: TS2304: Cannot find name 'Foo'.

如何让打字稿知道在Foo方法中创建了extend

1 个答案:

答案 0 :(得分:2)

  

我怎样才能让打字稿知道在扩展方法中创建了Foo

你不能声明一个函数,当被调用时会污染全局命名空间。这感觉就像一个坏主意,所以我怀疑TypeScript会支持永远

注意:可以声明一个将为您返回构造函数的函数。但这不是你要问的问题。