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
