[英]Types in object destructuring
這個
const { foo: IFoo[] } = bar;
和這個
const { foo: Array<IFoo> } = bar;
會合理地導致錯誤。
和這個
const { foo: TFoo } = bar;
只會破壞TFoo
屬性。
如何為解構對象屬性指定類型?
事實證明,可以在:
之后為整個解構模式指定類型:
const {foo}: {foo: IFoo[]} = bar;
這實際上並不比普通的舊
const foo: IFoo[] = bar.foo;
我顯然有點遲到了,但是:
interface User {
name: string;
age: number;
}
const obj: any = { name: 'Johnny', age: 25 };
const { name, age }: User = obj;
屬性name
和age
的類型應分別正確推斷為string
和number
。
我有這樣的場景:
const { _id } = req.query
if (_id.substr(2)) { 🚫
...
}
其中req.query
的類型如下
type ParsedUrlQuery = { [key: string]: string | string[] }
所以這樣做有效:
const { _id } = req.query as { _id: string }
if (_id.substr(2)) { 🆗
...
}
具有諷刺意味的是,Typescript 是正確的,我應該這樣做:
const _id = String(req.query._id) ✅
我自己的問題的后續行動。
不需要為對象屬性指定類型,因為它們是從解構對象中推斷出來的。
考慮到bar
輸入正確,將推斷foo
類型:
const bar = { foo: [fooValue], ... }; // bar type is { foo: IFoo[], ... }
...
const { foo } = bar; // foo type is IFoo[]
即使bar
沒有正確輸入( any
或unknown
),也可以斷言它的類型:
const { foo } = bar as { foo: IFoo[] }; // foo type is IFoo[]
如果你想析構和重命名
const {foo: food}: {foo: IFoo[]} = bar;
花了我一秒鍾才把上面的東西弄好
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.