Mhd*_*Mhd 62 node.js typescript microservices
每当我尝试在 TypeScript 环境中向全局 Nodejs 全局 namspace 添加函数时,都会收到此错误。
元素隐式具有“any”类型,因为类型“typeof globalThis”没有索引签名
声明全局命名空间
declare global {
namespace NodeJS {
interface Global {
signin(): string[]
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以如果我尝试这个
global.signin = () => {}
Run Code Online (Sandbox Code Playgroud)
它返回一个
元素隐式具有“any”类型,因为类型“typeof globalThis”没有索引签名
IRO*_*00N 77
我遇到了类似的问题,我发现节点的全局类型最近发生了变化;您现在可以通过执行以下操作来覆盖它们:
// global.d.ts
declare global {
function someFunction(): string;
var someVariable: string;
}
Run Code Online (Sandbox Code Playgroud)
注意:这不适用于let
或const
您必须使用var
.
// index.ts
global.someFunction = () => "some value";
global.someVariable = "some value";
Run Code Online (Sandbox Code Playgroud)
Wil*_*ana 45
以下是 Node v16 的示例
// globals.d.ts
declare module globalThis {
var signin: () => string[];
}
Run Code Online (Sandbox Code Playgroud)
Coo*_*Lab 21
我在使用 svelte.kit 应用程序时遇到了同样的问题。我的数据库模块使用全局变量来存储 dbClient 作为承诺。当 global.d.ts 文件包含此内容时,VSCode 停止抱怨。
import type { MongoClient } from 'mongodb'
declare global {
namespace globalThis {
var _mongoClientPromise: Promise<MongoClient>
}
}
Run Code Online (Sandbox Code Playgroud)
小智 12
您应该在 global.d.ts 中声明一个全局声明为接口,如下所示:
export interface global {}
declare global {
var signin: ()=>string[]
}
Run Code Online (Sandbox Code Playgroud)
您必须使用var
关键字 in declare global
, 并删除namespace NodeJS {
。
像这样:
//globals.d.ts
import type { EventEmitter } from "events";
declare global {
var myGlobal: EventEmitter;
}
Run Code Online (Sandbox Code Playgroud)
/// <reference path="globals.d.ts" />
//index.ts
// reference needs to be at top of file
import { EventEmitter } from "events";
global.myGlobal = new EventEmitter();
global.myGlobal // EventEmitter type: EventEmitter
window.myGlobal // EventEmitter type: EventEmitter
Run Code Online (Sandbox Code Playgroud)
或者,如果文件中没有任何导入.d.ts
:
//namedoesntmatter.d.ts
declare var a: string;
Run Code Online (Sandbox Code Playgroud)
//index.ts
global.a = "Hello"
global.a //Hello type: string
window.a //Hello type: string
Run Code Online (Sandbox Code Playgroud)
就我自己而言,直到后来我才完全意识到我声明的全局命名空间是区分大小写的。
而不是这个。在编辑我的问题之前,它是namespace NODEJS
declare global {
namespace NODEJS {
interface Global {
signin(): string[]
}
}
}
Run Code Online (Sandbox Code Playgroud)
本来应该是这个
declare global {
namespace NodeJS {
interface Global {
signin(): string[]
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意NODEJS and NodeJS
。在我进行这些更改之后,Typescript 很酷,并且它按照我预期的方式工作。
归档时间: |
|
查看次数: |
52819 次 |
最近记录: |