Nie mogę znaleźć definicji TypeScript @type/{name}
dla jednego z moich zainstalowanych pakietów NodeJS, więc próbuję napisać d.ts
dla niego plik i umieścić go w {project root}\typings
folderze. Oto jak to robię:
// My source code: index.ts
import Helper from 'node-helper-lib';
// My definition: \typings\node-helper-lib.d.ts
declare....(something else)
declare module 'node-helper-lib' {
class Helper { ... }
export = Helper;
}
Jednak program Visual Studio Code nadal generuje ten błąd i umieszcza czerwoną linię pod declare module 'node-helper-lib'
:
[ts] Nieprawidłowa nazwa modułu w rozszerzeniu. Moduł „node-helper-lib” jest zastępowany jako moduł bez typu w „{ścieżka projektu} \ node_modules \ node-helper-lib \ index.js”, którego nie można rozszerzyć.
Czy nie jest to uzasadnione, ponieważ biblioteka jest nietypowa, więc powinienem mieć możliwość dodawania do niej pisania?
AKTUALIZACJA:
Ja używam:
- TypeScript: 2.1.4
- Kod programu Visual Studio: 1.9.1
- Węzeł JS: 6.9.4
- Windows 10 x64
źródło
Po kilku próbach i błędach stwierdziłem, że
augmentation
oznacza to „deklarowanie modułu w tym samym pliku z innymi deklaracjami modułów”.Dlatego jeśli chcemy napisać plik definicji dla nietypowej biblioteki JavaScript innej firmy, musimy mieć TYLKO JEDEN
declare module 'lib-name'
w tym pliku, a 'nazwa-biblioteki' musi dokładnie odpowiadać nazwie biblioteki (można ją znaleźć w pliku package.json, " name ”).Z drugiej strony, jeśli biblioteka zewnętrzna ma już
.d.ts
dołączony plik definicji , a chcemy rozszerzyć jej funkcjonalności, to dodatkową definicję możemy umieścić w innym utworzonym przez nas pliku. To się nazywaaugmenting
.Na przykład:
// These module declarations are in same file, given that each of them already has their own definition file. declare module 'events' { // Extended functionality } declare module 'querystring' { // Extended functionality } declare module '...' { ... }
Zostawiam tutaj swoje odkrycie na wypadek, gdyby ktoś miał to samo pytanie. I proszę, popraw mnie, jeśli coś przeoczyłem.
źródło
supertest
- skarga TypeScript nawet nie ma sensu, jak mogę nie rozszerzyć czegoś, co nawet nie ma deklaracji? Myślałem, że wiele razy pisałem takie pliki z niestandardową definicją ...[ts] Invalid module name in augmentation. Module 'supertest' resolves to an untyped module at '/home/chase/Desktop/projects/formuoli/node_modules/supertest/index.js', which cannot be augmented.
- niestety@types/supertest
jest zepsuty przez włączenie bibliotek DOM, które powodują, że jest uszkodzony ... wygląda na to, że nie mam szczęścia.d.ts
, może powinieneś po prostu przenieść cały import do deklarowanego modułu "nazwaModułu" {}.import
wywołania muszą wchodzić wdeclare module 'module' {}
zakres. błąd jest co najwyżej mylącyimport
instrukcje wymagane przez Twój moduł na zewnątrzdeclare module
zamiast wewnątrz niego. Takie nieintuicyjne dziwne zachowanie (przepraszam za to, że się narzekam).Otrzymałem również ten komunikat o błędzie. Problem polegał na tym, że próbowałem zadeklarować inny moduł w istniejącym pliku definicji typu, który zawierał deklarację modułu. Po przeniesieniu deklaracji nowego modułu do nowego pliku błąd zniknął.
źródło
W moim przypadku po prostu użyłem następującej deklaracji w jednym z moich plików typów, więc mogłem użyć wszystkich pakietów nietypowych:
declare module '*'
źródło