Typescript: Karte,Setzen ... im ES5-Ziel

Erstellt am 28. Mai 2015  ·  3Kommentare  ·  Quelle: microsoft/TypeScript

Nach dem Update des Typescript-Compilers von Version 1.4.1 auf 1.5.0 Beta wurde der Quellcode in meinem Projekt enthalten, um ein Fehlerprotokoll wie 'Map is not found' zu erstellen.
Also habe ich dieses Problem recherchiert und bin zu einem Schluss gekommen. Die lib.d.ts enthält keine Map- und Set-Definitionen, außer ES6 wurde in tsconfig.json ausgewählt.

Tatsächlich ist Map and Set eine Spezifikation von ES6. Natürlich können wir Map and Set nicht in dem Projekt verwenden, das auf ES5 oder niedriger ausgerichtet ist.
Aber wir könnten Map und Set auch dann verwenden, wenn ich ES5 als Ziel vor Typescript 1.4.1 auswähle.
Ich weiß, dass die Aktivierung der Verwendung von Map and Set in dem für ES5 erstellten Projekt ein Risiko birgt.
Weil es einige Browser gibt, die Map and Set nicht unterstützen.

Ich denke jedoch, dass es besser ist, einige der Konfigurationseigenschaften, die zum Umschalten dienen, zu verwenden, um diese Definitionen zu verwenden oder nicht. Meinst du nicht?

Question

Hilfreichster Kommentar

@LimeStreem wir haben in 1.5.0-beta einige IE-spezifische Typen aus der Bibliothek entfernt. Sie können einfach den Typ in einer Ihrer Dateien definieren wie:

interface Map<K, V> {
    clear(): void;
    delete(key: K): boolean;
    forEach(callbackfn: (value: V, index: K, map: Map<K, V>) => void, thisArg?: any): void;
    get(key: K): V;
    has(key: K): boolean;
    set(key: K, value: V): Map<K, V>;
    size: number;
}
declare var Map: {
    new <K, V>(): Map<K, V>;
    prototype: Map<any, any>;
}
interface Set<T> {
    add(value: T): Set<T>;
    clear(): void;
    delete(value: T): boolean;
    forEach(callbackfn: (value: T, index: T, set: Set<T>) => void, thisArg?: any): void;
    has(value: T): boolean;
    size: number;
}
declare var Set: {
    new <T>(): Set<T>;
    prototype: Set<any>;
}

Alle 3 Kommentare

@LimeStreem wir haben in 1.5.0-beta einige IE-spezifische Typen aus der Bibliothek entfernt. Sie können einfach den Typ in einer Ihrer Dateien definieren wie:

interface Map<K, V> {
    clear(): void;
    delete(key: K): boolean;
    forEach(callbackfn: (value: V, index: K, map: Map<K, V>) => void, thisArg?: any): void;
    get(key: K): V;
    has(key: K): boolean;
    set(key: K, value: V): Map<K, V>;
    size: number;
}
declare var Map: {
    new <K, V>(): Map<K, V>;
    prototype: Map<any, any>;
}
interface Set<T> {
    add(value: T): Set<T>;
    clear(): void;
    delete(value: T): boolean;
    forEach(callbackfn: (value: T, index: T, set: Set<T>) => void, thisArg?: any): void;
    has(value: T): boolean;
    size: number;
}
declare var Set: {
    new <T>(): Set<T>;
    prototype: Set<any>;
}

Wow, ich freue mich, dass Sie dieses Code-Snippet schreiben! :Lachen:
Ich frage mich, dass dieses Problem vielen Typoskriptbenutzern helfen wird!

declare class WeakMap< Key , Value > {
    delete( key : Key ) : boolean
    get( key : Key ) : Value
    has( key : Key ) : boolean
    set( key : Key , value : Value ) : Map< Key , Value >
}

declare class Map< Key , Value > {
    clear(): void
    delete( key : Key ) : boolean
    forEach< Context = any >( handler : ( this : Context , value : Value , key : Key , map : Map< Key , Value > ) => void , context? : Context ) : void
    get( key : Key ) : Value
    has( key : Key ) : boolean
    set( key : Key , value : Value ) : Map< Key , Value >
    size : number
}

declare class Set< Value > {
    add( value : Value ) : Set< Value >
    clear() : void
    delete( value : Value ) : boolean
    forEach< Context = any >( handler : ( this : Context , value : Value , key : Value , map : Set< Value > ) => void , context? : Context ) : void
    has( value : Value ) : boolean
    size : number
}
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen