将 typescript 编译器从 1.4.1 版更新到 1.5.0 测试版后,我的项目中包含的源代码变成了错误日志,例如“找不到地图”。
于是,我研究了这个问题,得出了一个结论。 除了在 tsconfig.json 中选择了 ES6 之外,lib.d.ts 不再包含 Map 和 Set 定义。
实际上,Map 和 Set 是 ES6 的规范。 在面向 ES5 或更低版本的项目中,我们不能使用 Map 和 Set 是很自然的。
但是即使我在 typescript 1.4.1 之前选择 ES5 作为目标,我们也可以使用 Map 和 Set。
我知道在为 ES5 制作的项目中启用它以使用 Map 和 Set 存在风险。
因为有些浏览器不支持 Map 和 Set。
但是,我认为最好制作一些用于切换是否使用这些定义的配置属性。 你不这么认为吗?
@LimeStreem我们从 1.5.0-beta 的库中删除了一些特定于 IE 的类型。 您可以在其中一个文件中定义类型,例如:
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>;
}
哇,感谢您编写此代码片段! :笑:
我想知道这个问题会帮助很多打字稿用户!
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 的类型。 您可以在其中一个文件中定义类型,例如: