我们假设我们有一个普通的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
?
答案 0 :(得分:2)
我怎样才能让打字稿知道在扩展方法中创建了Foo
你不能声明一个函数,当被调用时会污染全局命名空间。这感觉就像一个坏主意,所以我怀疑TypeScript会支持永远。
注意:可以声明一个将为您返回构造函数的函数。但这不是你要问的问题。