提问人:okieh 提问时间:5/2/2014 更新时间:9/9/2016 访问量:5872
TypeScript - 如何:以“”开头的属性。(点)
TypeScript - how to: property starting with a "." (dot)
问:
调用 .NET OAuthToken 终结点时,结果包含两个以“.”开头的属性:
{
"access_token":"abcde..."
"expires_in":1209599
".expires":"Fri, 16 May 2014..." <- this
".issued":"Fri, 02 May 2014..." <- this
... more properties ...
}
我喜欢做的是在 TypeScript 中创建一个接口来处理这个结果。但是,我不知道如何用前面的小点声明这两个属性。
export interface Token {
access_token: string;
expires_in: number;
.expires???
.issued???
}
有什么想法吗?
答:
17赞
JAB
5/2/2014
#1
查看 TypeScript 语言规范的第 3.7.1 节,看起来对象字面量中的属性签名与 JavaScript 中的对象字面量属性定义大致相同,这意味着属性名称可以是标识符、字符串文字或数字文字。换句话说,您可以简单地执行以下操作:
export interface Token {
access_token: string;
expires_in: number;
".expires": string;
".issued": string;
}
评论
0赞
okieh
5/2/2014
不知道这么简单......多谢!
0赞
JAB
5/2/2014
访问这些属性的工作方式也与在 JavaScript 中相同,正如 basarat 的回答中指出的那样。由于不是有效的标识符,因此无法使用。foo..expires
.expires
6赞
basarat
5/2/2014
#2
只需使用带引号的接口成员:
interface Token {
access_token: string;
expires_in: number;
'.expires': number;
}
var foo:Token;
foo['.expires'] = '123'; // Error
foo['.expires'] = 123; // okay
评论
0赞
JAB
5/2/2014
当示例使用字符串时,为什么要键入数字(从技术上讲是时间戳的字符串表示形式,但问题中没有任何内容说明时间戳实际上存储为数值)?.expires
2赞
basarat
5/2/2014
@JAB我并没有专注于特定的类型。专注于类型安全:)
评论