如果我有一堂课:
在文件“BigClass.ts”中:
class BigClass{
/// a lot of properties and methods here, I mean, a lot
}
window['big'] = new BigClass();
我想在“Big.d.ts”中声明全局一个:
declare let big:BigClass;
TS 不会让我这样做,因为我也只能使用 .d 文件中的接口来定义声明的变量。
但是这个类很大,我不想为它创建一个接口,我会在那里重复每个prop和方法......有没有办法解决它?
或者也许还有另一种声明全局变量的方法,基于我不知道的现有类?
做到这一点的方法是简单地把declare let big:BigClass;
在BigClass.ts
,而不是在一个d.ts文件。这是完全合法的。
这是假设 BigClass.ts 不是模块,这意味着它没有 import\export 语句。如果它不是模块,其他文件也会“看到”declare 语句。
然而,这是一个不好的做法,因为您传递的事实window
恰好是浏览器中的全局对象。
更好的方法:
//file: BigClass.ts
class BigClass{
}
interface Window {
big: BigClass;
}
window.big = new BigClass();
而且由于模块确实更易于使用,因此您可以通过以下方式使用模块执行此操作:
//file: BigClass.ts
export class BigClass{
}
declare global {
interface Window {
big: BigClass;
}
}
window.big = new BigClass();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句