Typescript &引用;设{a,b}:{a:string,b:number}=o";打字

Typescript &引用;设{a,b}:{a:string,b:number}=o";打字,typescript,syntax,Typescript,Syntax,我是打字新手。假设我们有一个名为o的对象,如下所示: let o = { a: "foo", b: 12, c: "bar" }; 然后,设{a,b}=o。 据我所知,让{a,b}=o指变量a=o.a,b=o.b在JS中。我理解这个语法 但是,当谈到让{a,b}:{a:string,b:number}=o 下面的示例: 请解释{a:string,b:number}的用途。 谢谢我认为这是一个特性,在解构后编译器无法检测a和b的类型。那么为什么这样做是为了显式地给出变量的

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

let o = {
    a: "foo",
    b: 12,
    c: "bar"
};
然后,
设{a,b}=o。
据我所知,
让{a,b}=o
变量a=o.a,b=o.bJS中。我理解这个语法

但是,当谈到
让{a,b}:{a:string,b:number}=o

下面的示例:

请解释
{a:string,b:number}
的用途。
谢谢

我认为这是一个特性,在解构后编译器无法检测
a
b
的类型。那么为什么这样做是为了显式地给出变量的类型呢。但是现在没有
{a:string,b:number}
编译器可以检测类型。

您引用的语法明确地将局部变量
a
b
分别声明为
string
number
,它将等价于:

let a: string = o.a;
let b: number = o.b;
在这个简单的编码案例中,可以很容易地从对象推断出类型,但是您可能需要指定不同的类型,或者从API返回值,在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
});