Typescript 对象分解中的类型

Typescript 对象分解中的类型,typescript,destructuring,Typescript,Destructuring,这个 还有这个 const { foo: IFoo[] } = bar; 将只对TFoo属性进行解构 如何为分解对象属性指定类型?事实证明,可以为整个分解模式指定:之后的类型: const { foo: TFoo } = bar; 事实上,这并不比普通的老东西好多少 const {foo}: {foo: IFoo[]} = bar; 我参加聚会显然有点晚了,但是: const foo: IFoo[] = bar.foo; 属性name和age的类型应分别正确推断为string和numbe

这个

还有这个

const { foo: IFoo[] } = bar;
将只对
TFoo
属性进行解构


如何为分解对象属性指定类型?

事实证明,可以为整个分解模式指定
之后的类型:

const { foo: TFoo } = bar;
事实上,这并不比普通的老东西好多少

const {foo}: {foo: IFoo[]} = bar;

我参加聚会显然有点晚了,但是:

const foo: IFoo[] = bar.foo;

属性
name
age
的类型应分别正确推断为
string
number

我自己问题的后续问题

不需要为对象属性指定类型,因为它们是从已分解的对象推断出来的。

考虑到
bar
键入正确,将推断
foo
类型:

interface User {
  name: string;
  age: number;
}

const obj: any = { name: 'Johnny', age: 25 };
const { name, age }: User = obj;
即使
没有正确键入(
任何
未知
),也可以断言其类型:

const bar = { foo: [fooValue], ... }; // bar type is { foo: IFoo[], ... }
...
const { foo } = bar; // foo type is IFoo[]
NextJS类型脚本示例 我有过这样的情景:

const { foo } = bar as { foo: IFoo[] }; // foo type is IFoo[]
其中输入的“req.query”类似于NextJS中的
string | string[]
。。。因此,这样做有效:

const { _id } = req.query;
if (_id.contains('whatever')) { // typescript complained
 ...
}

讽刺的是,Typescript是正确的,但我不想做实际的编程工作来处理字符串和字符串数组。

好问题,但是它不是可以从
条的定义推断出类型吗?
涵盖得很好。@user663031注释应该删除,因为它具有误导性。@SasukeUchiha文章不可用,但大多数文章都可以通过文章标题进行谷歌搜索。它被移到了。它确实透露了一些信息,但是
{foo}
不是一个值。这就是通常所说的“解构分配模式”。您在这里看到的实际上是一个特殊的TypeScript功能,它允许类型与这些模式相关联。事实上,它更像是一个特例,尤其是与显然只为
z
指定类型的
let x,y,z:string
相比。我更新了答案。这是一个罕见的情况,当你想使用一个接口进行每一次破坏。
const { _id } = req.query;
if (_id.contains('whatever')) { // typescript complained
 ...
}
const { _id } = req.query as { _id: string };
if (_id.contains('whatever')) { // typescript is fine
 ...
}