Typescript: Map,Set ... 在 ES5 目标中

创建于 2015-05-28  ·  3评论  ·  资料来源: microsoft/TypeScript

将 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。

但是,我认为最好制作一些用于切换是否使用这些定义的配置属性。 你不这么认为吗?

Question

最有用的评论

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

所有3条评论

@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
}
此页面是否有帮助?
0 / 5 - 0 等级