“let {a,b}:{a:string,b:number} = o”in typeScript

时间:2018-01-19 06:36:47

标签: typescript syntax

我是TypeScript的新手。假设我们有一个名为o的对象,如下所示:

let o = {
    a: "foo",
    b: 12,
    c: "bar"
};

然后,let { a, b } = o;。 据我所知,let { a, b } = o;表示 JS 中的var a = o.a, b = o.b;。我理解这种语法。

但是,我想到let { a, b }: { a: string, b: number } = o;时的观点。

此处的示例:the example

请解释{ a: string, b: number }的目的是什么。 谢谢

2 个答案:

答案 0 :(得分:2)

您引用的语法分别将局部变量ab明确声明为stringnumber,它等同于:

let a: string = o.a;
let b: number = o.b;

在这个简单的编码情况下,可以很容易地从对象中推断出类型,但是您可能有一个不同的类型要分配或从API返回值,您需要说明属性的预期类型是什么。

您正在使用API​​的更适用的实际示例可能如下所示:

interface MyAPIResponse {
    a: string;
    b: number;
}

httpService.get('endpoint').then(({a, b}: MyAPIResponse) => {
   // 'a' will have type string, and 'b' will have type number
});

答案 1 :(得分:1)

我认为在解构后编译器无法检测到ab的类型时,这是一个功能。那么为什么这样做是为了明确给出变量的类型。但是现在没有{ a: string, b: number }编译器就可以检测到类型。