Kształty obiektów
Record
Buduje typ obiektu ze zbioru kluczy i jednego typu wartości.
Czym jest
Konstruktor tam, gdzie `Pick` jest selektorem. Z unii kluczy i typu wartości tworzy obiekt o tych kluczach, a dla `string` tworzy zamiast tego sygnaturę indeksu. Te dwa zachowania wyglądają podobnie i podobne nie są: jedno to ustalony kształt, drugie to słownik.
Przykłady
Record<'a' | 'b', number>
→{ a: number; b: number; }Record<string, number>
→{ [x: string]: number; }Sygnatura indeksu, nie ustalony kształt — każdy klucz jest dozwolony i żaden gwarantowany.
Record<'id', string>
→{ id: string; }
Każdy rozwinięty typ powyżej wypisał TypeScript 5.9.3, nie ręka człowieka.
Czego nie robi
- Nie obiecuje, że klucze istnieją w czasie wykonania. `Record<string, number>` bez oporu pozwoli odczytać klucz, którego nigdy nie ustawiono, i poda dla niego `number`.
- Nie różnicuje wartości per klucz. Gdy każdy klucz potrzebuje własnego typu wartości, chcesz typu mapowanego z `as`, a nie `Record`.
Wniosek
Literalna unia kluczy daje kształt, który kompilator sprawdzi. `string` daje słownik, którego nie sprawdzi. Wybieraj świadomie.