我有一个名为canJS的第三方库。 有这个can.Map模块。这个模块是用AMD编写的。你可以用依赖加载器加载它,例如requirejs。
使用can.Map我们提供了两种创建实例的方法。
let foo = new can.Map([props])
let Foo = can.Map.extend([name,] [staticProperties,] instanceProperties);
let foobar = new Foo();
我试着为这个类写一个简单的类型定义
declare module "can/map/" {
class canMap {
}
}
但现在我卡住了。
怎么看那种类型的定义。 我总是得到这样的错误:
不能使用' new'表达式类型缺少调用或 构建签名
答案 0 :(得分:2)
您可以使用适当的documentation来编写声明文件。
在你的情况下,我认为,它将是这样的:
declare module can {
class Map {
constructor(props: any);
static extend(name, staticProperties, instanceProperties): Map;
attr(): {[index: string]: any};
// Declarations for other properties and functions
}
}
用法(当然,应该加载“canjs”):
var a = new can.Map({});
var b = can.Map.extend({}, {}, {});
var c = a.attr();
最好的方法是在definitelytyped.org找到明确的类型声明。几乎所有流行的图书馆定义都已经写好了。
您可以使用typings进行“d.ts”文件管理。
可选参数(标记为“?”)和静态函数“extend”返回构造函数(带有重载):
declare module can {
class Map {
constructor(props?: any);
static extend(instanceProperties): { new(): Map };
static extend(name, staticProperties, instanceProperties): { new(): Map };
attr(): {[index: string]: any};
// Declarations for other properties and functions
}
}
let creator1 = can.Map.extend({});
let creator2 = can.Map.extend({}, {}, {});
var c = new creator1();
当然,您应该指定函数参数的类型(现在它们是“任何”类型)。 您可以在Typescript documentation中找到更多详细信息。