Typescript: マップ、セット...をES5ターゲットに

作成日 2015年05月28日  ·  3コメント  ·  ソース: microsoft/TypeScript

typescriptコンパイラをバージョン1.4.1から1.5.0ベータに更新した後、私のプロジェクトに含まれているソースコードは、「マップが見つかりません」などのエラーログを作成するようになりました。
したがって、私はこの問題を調査し、結論に達しました。 lib.d.tsには、tsconfig.jsonで選択されているES6を除いて、マップとセットの定義が含まれなくなりました。

実は、マップアンドセットはES6の仕様です。 ES5以下を対象としたプロジェクトではMapandSetを使用できないのは当然です。
ただし、typescript 1.4.1の前にターゲットとしてES5を選択した場合でも、Map andSetを使用できます。
ES5用に作成されたプロジェクトでMapand Setを使用できるようにすることには、リスクが伴うことを私は知っています。
Map andSetをサポートしていないブラウザがあるためです。

ただし、これらの定義を使用するかどうかを切り替えるための構成のプロパティの一部を作成する方がよいと思います。 そう思いませんか?

Question

最も参考になるコメント

@LimeStreem 1.5.0-betaのライブラリから、IE固有のタイプをいくつか削除しました。 次のように、ファイルの1つでタイプを定義できます。

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>;
}

全てのコメント3件

@LimeStreem 1.5.0-betaのライブラリから、IE固有のタイプをいくつか削除しました。 次のように、ファイルの1つでタイプを定義できます。

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>;
}

うわー、このコードスニペットを書いていただきありがとうございます! :笑い:
この問題は多くのtypescriptユーザーに役立つのだろうか!

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
}
このページは役に立ちましたか?
0 / 5 - 0 評価