Główne logo strony
TypeScript

Typ warunkowy infer w TS


W TypeScript możemy wykorzystać typy warunkowe wraz z słowem kluczowym infer do wnioskowania o typach.

Przyjrzyjmy się poniższemu przykładowi:

type ArrayTypes<T> = T extends (infer U)[] ? U : never;

let arr = [1, "2", []];
type test = ArrayTypes<typeof arr>; // typ test = string | number | any[]

W tym przykładzie, typ ArrayTypes<T> bierze typ T i sprawdza, czy T jest typem tablicy. Jeśli tak, to inferuje typ U z tablicy T[] i zwraca U. W przeciwnym razie zwraca never.

Ważne jest, aby zauważyć, że infer musi być podłączony do U, a nie do []. Dlatego korzystamy z nawiasów w (infer U)[]. Bez nawiasów, TypeScript zinterpretowałby to jako infer (U[]), co byłoby niepoprawne, ponieważ infer może być używane tylko do inferencji typów, a nie struktur typów takich jak tablice.

Kolejny przykład, tym razem z obiektem. W tym przypadku infer stworzy nam typ, który będzie zawierał wszystkie typy wartości obiektu:

type ObjectTypes<T> = T extends { a: infer U; b: infer U } ? U : never;

let obj = { a: 1, b: "2" };
type Test = ObjectTypes<typeof obj>; // typ Test = string | number

Jak widać możliwości tutaj są ogromne, więc warto zapoznać się z tym tematem.

Losowy shortKolejny short: TypeScript