`type {}`和`Dictionary <t> {[key:string]:T之间的区别; }`

时间:2017-11-15 18:36:52

标签: typescript typescript2.0

异步库使用此声明

export interface Dictionary<T> { [key: string]: T; }

但我很困惑,这与

有什么不同
type {}

也许type {}允许将Symbol用于键,而Dictionary接口只允许键成为字符串?

以下是异步的输入: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/async/index.d.ts#L9

2 个答案:

答案 0 :(得分:3)

使用--noImplicitAny时,上面Dictionary<T>界面中的 index-signature 将允许基于字符串的任意属性访问,而{}则不会,因为它没有索引签名:

interface Dictionary<T> { [key: string]: T; }

let a: Dictionary<string> = {};
let b: {} = {};

a["one"] = "two"; // OK
b["two"] = "three"; // Not OK

--noImplicitAny未使用 或使用--suppressImplicitAnyIndexErrors 时,这不是问题,因为每个对象类型都被视为具有默认情况下隐式的“any-to-any”索引签名。

答案 1 :(得分:0)

除了约翰·魏兹(John Weisz)的答案之外,还有一个明显的不同之处:Dictionary<T>允许您指定T{}不能。