我正在尝试为此String.format for JavaScript实施创建一个TypeScript定义文件,但我很挣扎。
我还是TypeScript的新手,我已经阅读了很多关于如何创建定义的文章/片段。我发现的最好的资源之一是Steve Fenton的博客文章Complex TypeScript Definitions Made Easy。我已经按照建议的例子进行了操作,但到目前为止还没有成功。
问题是因为外部Javascript向" String"添加了一个方法。 我已经尝试过"宣布" String类如下:
declare class String {
declare function format(str: string, obj0: any, obj1?: any, obj2?: any): string;
}
这会导致错误:Duplicate identifier 'String'
我还尝试使用界面描述类型信息:
interface String {
format(str: string, obj0: any, obj1?: any, obj2?: any): string;
}
界面本身似乎没问题,但如果我试着打电话:
String.format("The {0} brown {1}!", "quick", "fox")
我收到错误The property 'format' does not exist on value of type '{ prototype: String; fromCharCode(...codes: number[]): string; (value?: any): string; new(value?: any): String; }'
。
我假设这是因为format
是一个静态方法(无论如何都是TypeScript术语),但是被定义为接口上的实例方法(因为接口不能包含静态方法定义) )。
我可能会用这个完全错误的方向,或者可能对Javascript,TypeScript或两者的某些元素有完全错误的理解。任何人至少可以把我推向正确的方向吗?
答案 0 :(得分:0)
目前,我认为没有办法,因为String的定义如下,而declare var
并未与其他类型合并。
declare var String: {
new (value?: any): String;
(value?: any): string;
prototype: String;
fromCharCode(...codes: number[]): string;
}
在最新的TypeScript github中,它使用可扩展的declare var String: StringConstructor
进行定义。
所以在下一个版本中你可以这样做:
interface StringConstructor{
format(str: string, obj0: any, obj1?: any, obj2?: any): string;
}
我知道这不是您所希望的答案,但我认为您必须等待下一个版本才能解决此问题。
当然,您现在可以通过将其投射到例如any
来使用它。
编辑在下面的评论之后
现在可以使用当前的TypeScript版本(1.3)
这会给你带来一些安全感,演员太习惯了看起来不太好但是它在编译过程中给你一些安全性,当你输入format
错误时它仍会发现错误({{1例如)。
frmat