如果我有课:
在文件" 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文件中的接口定义声明的变量。
但是这个课程非常大,我不想为它创建一个界面,我会重复每一个道具和方法......有没有办法绕过它?
或者根据我不知道的现有类,还有另一种声明全局变量的方法吗?
答案 0 :(得分:1)
执行此操作的方法是将declare let big:BigClass;
简单地放在BigClass.ts
中,而不是放在d.ts文件中。这完全合法。
这假设BigClass.ts不是一个模块,这意味着它没有import \ export语句。如果它不是模块,其他文件也会“看到”声明语句。
然而,这是一个不好的做法,因为你转发了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();
答案 1 :(得分:0)
我想在" Big.d.ts"中宣布全球一个:
你为什么要这样做?
如果您将声明此类的任何实例,ts将已经知道该类的所有内容。
并且还要避免全局变量。
const big = new BigClass();