Alo*_*lon 5 javascript oop module node.js typescript
我需要一些强类型的全局变量.
如下所述:在node.js中扩展TypeScript Global对象,为了向global
变量添加字段,我需要添加一个扩展Global
node.d.ts中指定的接口的.d.ts文件.
另外,正如Basarat所说:
您的文件需要清除任何根级别导入或导出.这会将文件转换为模块并将其与全局类型声明命名空间断开连接.
现在,我需要在Global
接口上有字段,其类型是我创建的自定义接口:
declare namespace NodeJS{
interface Global {
foo: Foo
bar: Bar
}
}
Run Code Online (Sandbox Code Playgroud)
我非常不愿意使用这种any
类型.
我可以将所有接口声明移动/复制到此声明文件,但这对我来说是一个糟糕的解决方案,因为Foo和Bar反过来会聚合其他接口的许多字段,包括Moment等第三方接口.
我需要一个解决这个悖论的方法
Tom*_*cer 10
这是一个方法。我不知道这是否是“正确”的做事方式,但它适用于 TypeScript 3.7.4。
src
,请创建一个新文件夹src/types
并global.d.ts
在该文件夹中创建一个文件。import { Express } from 'express';
declare global {
namespace NodeJS {
interface Global {
__EXPRESS_APP__: Express;
}
}
}
Run Code Online (Sandbox Code Playgroud)
declare namespace NodeJS {
interface Global {
__CONNECTION_COUNT__: number;
}
}
Run Code Online (Sandbox Code Playgroud)
global.d.ts
文件(以及您可能添加到的任何其他文件src/types
)被 TypeScript 编译器选中tsconfig.json
:{
"paths": {
"*": ["node_modules/*", "src/types/*"]
}
}
Run Code Online (Sandbox Code Playgroud)
// Below, `app` will have the correct typings
const app = global.__EXPRESS_APP__;
Run Code Online (Sandbox Code Playgroud)
小智 7
我发现这有效。
有一个文件,用 any 类型声明 NodeJS.Global 接口上的属性。该文件必须没有导入或引用。
节点.d.ts
declare namespace NodeJS{
interface Global {
foo: any
}
}
Run Code Online (Sandbox Code Playgroud)
然后在第二个文件中声明一个具有正确类型的全局变量。
global.d.ts
import IFoo from '../foo'
declare global {
const foo:Ifoo
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6261 次 |
最近记录: |