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をサポートしていないブラウザがあるためです。
ただし、これらの定義を使用するかどうかを切り替えるための構成のプロパティの一部を作成する方がよいと思います。 そう思いませんか?
@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
}
最も参考になるコメント
@LimeStreem 1.5.0-betaのライブラリから、IE固有のタイプをいくつか削除しました。 次のように、ファイルの1つでタイプを定義できます。