类型 'typeof globalThis' 没有索引签名
type 'typeof globalThis' has no index signature
每当我尝试在 TypeScript 环境中向全局 nodejs 全局命名空间添加函数时,我都会收到此错误。
Element implicitly has an 'any' type because type 'typeof globalThis'
has no index signature
声明全局命名空间
declare global {
namespace NodeJS {
interface Global {
signin(): string[]
}
}
}
所以如果我试试这个
global.signin = () => {}
它returns一个
Element implicitly has an 'any' type because type 'typeof globalThis'
has no index signature
只需通过 var
关键字声明变量。像这样:
// eslint-disable-next-line no-var
var hello = () => { console.log("hello world"); };
// eslint-disable-next-line no-var
var hi: () => number;
globalThis.hello();
globalThis.hi = () => 143;
您也可以在 .d.ts
文件中声明变量。
我遇到了类似的问题,我发现节点的全局类型是 changed recently-ish;您现在可以通过执行以下操作来覆盖它们:
// global.d.ts
declare global {
function someFunction(): string;
var someVariable: string;
}
注意:这不适用于 let
或 const
,您必须使用 var
。
// index.ts
global.someFunction = () => "some value";
global.someVariable = "some value";
您必须在 declare global
中使用 var
关键字,并删除 namespace NodeJS {
.
像这样:
//globals.d.ts
import type { EventEmitter } from "events";
declare global {
var myGlobal: EventEmitter;
}
/// <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
或者如果您在 .d.ts
文件中没有任何导入:
//namedoesntmatter.d.ts
declare var a: string;
//index.ts
global.a = "Hello"
global.a //Hello type: string
window.a //Hello type: string
就我自己而言,直到后来我才完全意识到我声明的全局名称空间区分大小写。
而不是这个。在我的问题被编辑之前它是 namespace NODEJS
declare global {
namespace NODEJS {
interface Global {
signin(): string[]
}
}
}
应该是这个
declare global {
namespace NodeJS {
interface Global {
signin(): string[]
}
}
}
关注NODEJS and NodeJS
。在我进行了这些更改之后,打字稿很酷,并且按我预期的方式工作。
我也遇到了同样的问题。通过以下代码修复它。
declare global {
function signin(): Promise<string[]>
}
您应该像这样在 global.d.ts 中声明一个全局声明为接口:
export interface global {}
declare global {
var signin: ()=>string[]
}
The vscode gives correct code hints
以下是节点 v16 的示例
// globals.d.ts
declare module globalThis {
var signin: () => string[];
}
每当我尝试在 TypeScript 环境中向全局 nodejs 全局命名空间添加函数时,我都会收到此错误。
Element implicitly has an 'any' type because type 'typeof globalThis' has no index signature
声明全局命名空间
declare global {
namespace NodeJS {
interface Global {
signin(): string[]
}
}
}
所以如果我试试这个
global.signin = () => {}
它returns一个
Element implicitly has an 'any' type because type 'typeof globalThis' has no index signature
只需通过 var
关键字声明变量。像这样:
// eslint-disable-next-line no-var
var hello = () => { console.log("hello world"); };
// eslint-disable-next-line no-var
var hi: () => number;
globalThis.hello();
globalThis.hi = () => 143;
您也可以在 .d.ts
文件中声明变量。
我遇到了类似的问题,我发现节点的全局类型是 changed recently-ish;您现在可以通过执行以下操作来覆盖它们:
// global.d.ts
declare global {
function someFunction(): string;
var someVariable: string;
}
注意:这不适用于 let
或 const
,您必须使用 var
。
// index.ts
global.someFunction = () => "some value";
global.someVariable = "some value";
您必须在 declare global
中使用 var
关键字,并删除 namespace NodeJS {
.
像这样:
//globals.d.ts
import type { EventEmitter } from "events";
declare global {
var myGlobal: EventEmitter;
}
/// <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
或者如果您在 .d.ts
文件中没有任何导入:
//namedoesntmatter.d.ts
declare var a: string;
//index.ts
global.a = "Hello"
global.a //Hello type: string
window.a //Hello type: string
就我自己而言,直到后来我才完全意识到我声明的全局名称空间区分大小写。
而不是这个。在我的问题被编辑之前它是 namespace NODEJS
declare global {
namespace NODEJS {
interface Global {
signin(): string[]
}
}
}
应该是这个
declare global {
namespace NodeJS {
interface Global {
signin(): string[]
}
}
}
关注NODEJS and NodeJS
。在我进行了这些更改之后,打字稿很酷,并且按我预期的方式工作。
我也遇到了同样的问题。通过以下代码修复它。
declare global {
function signin(): Promise<string[]>
}
您应该像这样在 global.d.ts 中声明一个全局声明为接口:
export interface global {}
declare global {
var signin: ()=>string[]
}
The vscode gives correct code hints
以下是节点 v16 的示例
// globals.d.ts
declare module globalThis {
var signin: () => string[];
}