2016-09-24 98 views
5

類型的對象解構

const { foo: IFoo[] } = bar; 

const { foo: Array<IFoo> } = bar; 

會合理地導致一個錯誤。

const { foo: TFoo } = bar; 

只會解構TFoo財產。

如何指定解構對象屬性的類型?

+0

好問題,但是它不能從「bar」的定義中推斷出類型嗎? – 2016-09-24 05:34:05

+0

這個覆蓋得很好[這裏](https://blog.mariusschulz.com/2015/11/13/typing-destructured-object-parameters-in-typescript)。 – 2016-09-24 07:00:10

+0

@torazaburo謝謝,它看起來像唯一的語法是在答案。 'bar'來自外部並且是鬆散的類型,所以我只想輸入所需的屬性。 – estus

回答

7

事實證明這是可能:後指定型爲全解構模式:

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

這在現實中並不比普通的更老

const foo: IFoo[] = bar.foo; 
+0

但是{foo}不是一個值。這就是通常所說的「解構賦值模式」。你在這裏看到的實際上是一種特殊的TypeScript功能,它允許類型與這些模式相關聯。 – 2016-09-24 07:02:45

+0

事實上,它更像是一種特殊情況,特別是與'let x,y,z:string'相比,它明顯只指定了'z'的類型。我更新了答案。 – artem

5

顯然我一個但是:

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

const obj: any = {name: 'Johnny', age: 25}; 
const {name, age}: User = obj; 

屬性的類型01應分別正確推斷爲和age分別爲stringnumber