如何创建真实 class 的定义?
How can I create definition of of real class?
如果我有 class:
在文件 "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 文件中的接口来定义声明的变量。
但是这个 class 非常大,我不想为它创建一个接口,我将在其中重复每个 prop 和方法...有没有办法绕过它?
或者也许有另一种声明全局变量的方法,基于我不知道的现有 class?
And I would like to declare global one in "Big.d.ts":
为什么要这样做?
如果你将声明这个 class 的任何实例,ts 将已经知道关于这个 class 的一切。
并且还要避免全局变量。
const big = new BigClass();
执行此操作的方法是简单地将 declare let big:BigClass;
放入 BigClass.ts
,而不是放在 d.ts 文件中。这是完全合法的。
这是假设 BigClass.ts 不是模块,这意味着它没有 import\export 语句。如果它不是模块,其他文件也会 "see" 声明语句。
然而,这是一个不好的做法,因为您依赖于 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();
如果我有 class:
在文件 "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 文件中的接口来定义声明的变量。
但是这个 class 非常大,我不想为它创建一个接口,我将在其中重复每个 prop 和方法...有没有办法绕过它?
或者也许有另一种声明全局变量的方法,基于我不知道的现有 class?
And I would like to declare global one in "Big.d.ts":
为什么要这样做?
如果你将声明这个 class 的任何实例,ts 将已经知道关于这个 class 的一切。
并且还要避免全局变量。
const big = new BigClass();
执行此操作的方法是简单地将 declare let big:BigClass;
放入 BigClass.ts
,而不是放在 d.ts 文件中。这是完全合法的。
这是假设 BigClass.ts 不是模块,这意味着它没有 import\export 语句。如果它不是模块,其他文件也会 "see" 声明语句。
然而,这是一个不好的做法,因为您依赖于 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();