To
const { foo: IFoo[] } = bar;
i to
const { foo: Array<IFoo> } = bar;
spowoduje błąd.
I to
const { foo: TFoo } = bar;
po prostu zniszczy TFoowłasność.
W jaki sposób można określić typy dla właściwości zniszczonych obiektów?
To
const { foo: IFoo[] } = bar;
i to
const { foo: Array<IFoo> } = bar;
spowoduje błąd.
I to
const { foo: TFoo } = bar;
po prostu zniszczy TFoowłasność.
W jaki sposób można określić typy dla właściwości zniszczonych obiektów?
Odpowiedzi:
Okazuje się, że można określić typ po :dla całego wzoru destrukturyzacji:
const {foo}: {foo: IFoo[]} = bar;
Co w rzeczywistości nie jest lepsze niż zwykły stary
const foo: IFoo[] = bar.foo;
{foo}nie jest wartością. Jest to tak zwany „dekonstruujący wzorzec przypisania”. To, co tu widzisz, jest w rzeczywistości specjalną funkcją TypeScript, która umożliwia skojarzenie typów z takimi wzorcami.
let x, y, z: stringktórego najwyraźniej określa ztylko typ . Zaktualizowałem odpowiedź.
Wyraźnie spóźniłem się na imprezę, ale:
interface User {
name: string;
age: number;
}
const obj: any = { name: 'Johnny', age: 25 };
const { name, age }: User = obj;
Rodzaje właściwości namei agepowinny być prawidłowo wywnioskowane stringi numberodpowiednio.
Kontynuacja mojego własnego pytania.
Typów nie trzeba określać we właściwościach obiektu, ponieważ są one wywnioskowane na podstawie zniszczonego obiektu.
Biorąc pod uwagę, że barzostał wpisany poprawnie, foozostanie wywnioskowany typ:
const bar = { foo: [fooValue], ... }; // bar type is { foo: IFoo[], ... }
...
const { foo } = bar; // foo type is IFoo[]
Nawet jeśli barnie został poprawnie wpisany ( anylub unknown), jego typ można potwierdzić:
const { foo } = bar as { foo: IFoo[] }; // foo type is IFoo[]
bar?