TypeScript - 如何:以“”开头的属性。(点)

TypeScript - how to: property starting with a "." (dot)

提问人:okieh 提问时间:5/2/2014 更新时间:9/9/2016 访问量:5872

问:

调用 .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我并没有专注于特定的类型。专注于类型安全:)