使用 "non-string keys" 访问对象值并将所有值定义为具有特定类型
Access object values using "non-string keys" and define all as having a certain type
没什么大不了的,但我想知道是否可以使用非字符串键访问一个对象,并定义它 return 与访问的任何类型相同。我可以弄清楚如何分别做这两件事,或者 "laboriously" 可以一起做。
我想我想要这样的东西:
var DEFINITIONS: {[key: 'non-string']: Definition} = { ... }
或
var DEFINITIONS: {[any]: Definition} = { ... }
我想这个语法不存在(还没有?;))。
定义 return 类型的对象 DEFINITIONS
但必须使用字符串键访问:
interface Definition {
id: number;
type: string;
}
var DEFINITIONS: {[key: string]: Definition} = {
v1: {
id: 4,
type: 'abc'
}
}
DEFINITIONS['v1']
可以使用非字符串键访问 DEFINITIONS
但不能定义 return 类型:
interface Definition {
id: number;
type: string;
}
var DEFINITIONS = {
v1: {
id: 4,
type: 'abc'
}
}
DEFINITIONS.v1 // Rightly does not show as having interface of `Definition`
或费力:
interface Definition {
id: number;
type: string;
}
var DEFINITIONS: {v1: Definition, v2: Definition, v3: Definition, etc...} = {
v1: {
id: 4,
type: 'abc'
},
v2: { ... },
v3: { ... },
etc ...
}
DEFINITIONS.v1 // Great! Has explicit interface of Definition
// or:
var v1: Definition = {id: 4, type: 'abc'};
var DEFINITIONS2 = {v1};
p.s。我不知道使用 ['v1']
或 v1
等密钥进行访问的正确技术术语是什么。
类型的索引器 属性 将对象建立为散列映射。有意地,这意味着您只能使用括号表示法来访问属性。对于可读性而言,这通常实际上是一件好事,因为这意味着使用 Object 创建的哈希映射与其他非动态对象之间存在明显的语法差异。但是,还有一个 open enhancement request 可以满足您的要求。
p.s. I don't know what the correct technical terms for access using keys like ['v1'] or v1 is.
EcmaScript 规范将它们分别称为“括号表示法”和“点表示法”;通俗地说,它们通常被称为“数组访问器”和“点访问器”。
没什么大不了的,但我想知道是否可以使用非字符串键访问一个对象,并定义它 return 与访问的任何类型相同。我可以弄清楚如何分别做这两件事,或者 "laboriously" 可以一起做。
我想我想要这样的东西:
var DEFINITIONS: {[key: 'non-string']: Definition} = { ... }
或
var DEFINITIONS: {[any]: Definition} = { ... }
我想这个语法不存在(还没有?;))。
定义 return 类型的对象 DEFINITIONS
但必须使用字符串键访问:
interface Definition {
id: number;
type: string;
}
var DEFINITIONS: {[key: string]: Definition} = {
v1: {
id: 4,
type: 'abc'
}
}
DEFINITIONS['v1']
可以使用非字符串键访问 DEFINITIONS
但不能定义 return 类型:
interface Definition {
id: number;
type: string;
}
var DEFINITIONS = {
v1: {
id: 4,
type: 'abc'
}
}
DEFINITIONS.v1 // Rightly does not show as having interface of `Definition`
或费力:
interface Definition {
id: number;
type: string;
}
var DEFINITIONS: {v1: Definition, v2: Definition, v3: Definition, etc...} = {
v1: {
id: 4,
type: 'abc'
},
v2: { ... },
v3: { ... },
etc ...
}
DEFINITIONS.v1 // Great! Has explicit interface of Definition
// or:
var v1: Definition = {id: 4, type: 'abc'};
var DEFINITIONS2 = {v1};
p.s。我不知道使用 ['v1']
或 v1
等密钥进行访问的正确技术术语是什么。
类型的索引器 属性 将对象建立为散列映射。有意地,这意味着您只能使用括号表示法来访问属性。对于可读性而言,这通常实际上是一件好事,因为这意味着使用 Object 创建的哈希映射与其他非动态对象之间存在明显的语法差异。但是,还有一个 open enhancement request 可以满足您的要求。
p.s. I don't know what the correct technical terms for access using keys like ['v1'] or v1 is.
EcmaScript 规范将它们分别称为“括号表示法”和“点表示法”;通俗地说,它们通常被称为“数组访问器”和“点访问器”。