Recibo este error cada vez que intento agregar una función al espacio de nombres global de nodejs global en un entorno de TypeScript.
El elemento tiene implícitamente un tipo 'cualquiera' porque el tipo 'typeof globalThis' no tiene firma de índice
declarando el espacio de nombres global
declare global { namespace NodeJS { interface Global { signin(): string[] } } }así que si pruebo esto
global.signin = () => {}devuelve un
El elemento tiene implícitamente un tipo 'cualquiera' porque el tipo 'typeof globalThis' no tiene firma de índice
Debe declarar una interfaz global declarada en global.d.ts de esta manera:
export interface global {} declare global { var signin: ()=>string[] }A continuación se muestra un ejemplo para Node v16
// globals.d.ts declare module globalThis { var signin: () => string[]; }Yo también tuve el mismo problema. Se solucionó con el siguiente código.
declare global { function signin(): Promise<string[]> }simplemente declare la variable por palabra clave var . Me gusta esto:
// 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; También puede declarar variables en archivos .d.ts .
Estaba teniendo un problema similar y descubrí que los tipos globales del nodo se cambiaron recientemente ; ahora puede anularlos haciendo:
// global.d.ts declare global { function someFunction(): string; var someVariable: string; } Nota: esto no funcionará con let o const , debe usar var .
// index.ts global.someFunction = () => "some value"; global.someVariable = "some value";Debe usar la palabra clave var en declare global y eliminar namespace NodeJS { .
Me gusta esto:
//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 O si no tiene importaciones en el archivo .d.ts :
//namedoesntmatter.d.ts declare var a: string; //index.ts global.a = "Hello" global.a //Hello type: string window.a //Hello type: stringen mi propio caso, no me di cuenta hasta más tarde de que el espacio de nombres global que declaré distinguía entre mayúsculas y minúsculas.
en lugar de esto. antes de que se editara mi pregunta, era el namespace NODEJS
declare global { namespace NODEJS { interface Global { signin(): string[] } } }se suponia que era esto
declare global { namespace NodeJS { interface Global { signin(): string[] } } } preste atención a NODEJS and NodeJS . Después de hacer estos cambios, mecanografiado estuvo bien con él y funcionó de la manera que esperaba.