在教程中,我阅读了如何扩展接口。假设我有一个带有一些接口的第三方库。教程指出,我可以简单地定义另一个具有完全相同名称的接口,它将扩展之前的接口:
// third-party source
interface jQueryElement {
data(name: string): any;
data(name: string, data: any): jQueryElement;
}
// my code
interface jQueryElement {
todo(): Todo;
todo(todo: Todo): void;
}
好的,但是您如何导入它们?不会发生名字冲突?
抱歉,我没有单独在 Typescript 中编写任何代码,仅在 Angular 中编写任何代码,所以我想知道我是否可以遵循这种方法,或者唯一的方法是使用extends
?定义其他接口:
interface jQueryElement2 extends jQueryElement {
todo(): Todo;
todo(todo: Todo): void;
}
当它们在同一范围内时,您可以通过这种方式扩展接口。JQuery
声明文件在全局范围内声明接口,所以这不是问题。
您只需将jquery-extension.d.ts
文件添加到您的项目(名称不重要),然后再次声明接口,添加您想要的方法或属性。然后,TypeScript 会选择它并将两种类型声明合二为一。
当然,声明方法只会让 TypeScript 认为它们存在。您仍然必须实际定义它们(在另一个文件中,而不是d.ts
文件中),否则在尝试执行它们时会出现运行时错误。
一个例子: jquery-extension.d.ts
interface JQueryStatic {
count(): number;
}
jquery-extension.ts
:
jQuery.fn.count = function() {
return this.length;
}
如果只是添加上面的代码而不扩展接口,TypeScript 会抗议,说这count
不是JQueryStatic
接口的已知属性。然后,您只需确保jquery-extension.ts
在应用程序的入口点导入:
import 'jquery-extension'
并做了。该d.ts
文件不需要导入,因为它们是环境声明文件,编译器会自行获取它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句