异步库使用此声明
export interface Dictionary<T> { [key: string]: T; }
但我很困惑,这与
有什么不同type {}
也许type {}
允许将Symbol用于键,而Dictionary接口只允许键成为字符串?
以下是异步的输入: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/async/index.d.ts#L9
答案 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
,{}
不能。