Tôi muốn khai báo một mảng các mặt hàng được thi hành theo kiểu và có thể lấy được một loại kết hợp từ nó. Mẫu này hoạt động nếu bạn không cung cấp một loại rõ ràng cho các mục trong mảng. Tôi không chắc làm thế nào để giải thích tốt nhất vì vậy đây là một ví dụ:
VÍ DỤ 1
type Pair = {
key: string;
value: number;
};
const pairs: ReadonlyArray<Pair> = [
{ key: 'foo', value: 1 },
{ key: 'bar', value: 2 },
] as const;
type Keys = typeof pairs[number]['key']
VÍ DỤ 2
type Data = {
name: string;
age: number;
};
const DataRecord: Record<string, Data> = {
foo: { name: 'Mark', age: 35 },
bar: { name: 'Jeff', age: 56 },
} as const;
type Keys = keyof typeof DataRecord;
Dưới đây là một ví dụ về việc lấy các phím khi sử dụng as const
. Tôi muốn hành vi tương tự nhưng với mảng được gõ rõ ràng.
const pairs = [
{ key: 'foo', value: 1 },
{ key: 'bar', value: 2 },
] as const;
type Keys = typeof pairs[number]['key']; // "foo" | "bar"
giá trị mong muốn của khóa: "foo"|"bar"
giá trị thực của các khóa: string
possibleKeys = ['foo', 'bar'] as const; type Keys = typeof possibleKeys[number]; type Pair = { key: Keys, value: number };
nhưng bạn vẫn cần liệt kê rõ ràng các phím có thể.
key
thuộc tính củaPair
loại bạn muốn, sau đó nó sẽ hoạt động như bạn đã viết.