To
const { foo: IFoo[] } = bar;
i to
const { foo: Array<IFoo> } = bar;
spowoduje błąd.
I to
const { foo: TFoo } = bar;
po prostu zniszczy TFoo
wł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 TFoo
wł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: string
którego najwyraźniej określa z
tylko 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 name
i age
powinny być prawidłowo wywnioskowane string
i number
odpowiednio.
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 bar
został wpisany poprawnie, foo
zostanie wywnioskowany typ:
const bar = { foo: [fooValue], ... }; // bar type is { foo: IFoo[], ... }
...
const { foo } = bar; // foo type is IFoo[]
Nawet jeśli bar
nie został poprawnie wpisany ( any
lub unknown
), jego typ można potwierdzić:
const { foo } = bar as { foo: IFoo[] }; // foo type is IFoo[]
bar
?