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
...
}