typescript - Kan inte hitta namnet 'Symbol' i typen deklarationsfilen för whatwg-fetch


Filen d.ts i dt~whatwg-fetch inkluderar följande deklaration.

declare class Headers {
    // other code ommited
    [Symbol.iterator](): IterableIterator<[string, string]>;
}

Vi har försökt skapa ett alternativt gränssnitt utan framgång. Ingen av följande fungerar. Vad kommer att fungera?

interface Symbol {}

interface Symbol<T> {}

interface Symbol {
   iterator: IterableIterator<[string, string]> 
}

interface Symbol<T> {
   iterator: IterableIterator<[string, string]> 
}

Redigera

Vi har sett Typescript Kan inte hitta namnet 'IterableIterator' och rekommendationen är att rikta in sig på es6. Är det nödvändigt?

http://www.typescriptlang.org/docs/handbook/iterators-and-generators.html

Svar #1

Symbol är nytt i ES6 och därför behöver du rikta din kompilator mot det.
För att göra det, ange att målet i kompilatoralternativen är "es6".

Definitionen för Symbol kan hittas i lib.es6.d.ts (medan den saknas i standard lib.d.ts)

Redigera

Du kan bara polyfilla den delen själv, du behöver bara kopiera de nödvändiga delarna från lib.es6.d.ts-filen och lägga dem i din egen fil och referera till den.

Jag kopierade det som behövdes för koden du postade och det är i denna lekplats.
Det kan innehålla mer än vad som faktiskt behövs, så lek runt med det.

Svar #2

Något som hjälpte mig att lista ut det var att lägga till följande inställning i tsconfig.json:

"lib": [
    "es6",
    "dom"
]

Efter det fick jag ett annat fel om dubbel deklaration av Promise men jag tog bara bort polyfill-typdefinitionen och det fungerade bra. Det verkar som att whatwg-fetch egentligen inte behöver ES6 Symbol, koden kan använda ES5-fallback: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/11290

Relaterade artiklar