型強制された項目の配列を宣言し、それから共用体型を導出できるようにしたいと思います。このパターンは、配列の項目にタイプを明示的に指定しない場合に機能します。私はそれを最もよく説明する方法がわからないので、ここに例があります:
例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']
例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;
を使用する場合のキーの導出例を以下に示しますas const
。これと同じ動作が必要ですが、配列が明示的に型指定されています。
const pairs = [
{ key: 'foo', value: 1 },
{ key: 'bar', value: 2 },
] as const;
type Keys = typeof pairs[number]['key']; // "foo" | "bar"
キーの望ましい値: "foo"|"bar"
キーの実際の値: string
@JaredSmithこれは実行時に問題になりません。これを使用して、実行中に変化しない任意の数の値を宣言しています。これは、型宣言でkey: "foo" | "bar"を設定することと同じです。
—
ベン
「これは実行時に問題にならないはずです」--- typescriptには実行時がないため、実行時に実行することは問題です。
—
zerkms
@Benを使用すると、より具体的にすることができます。変更可能な参照型からプルされたプロパティのタプルを使用して、不変のプリミティブのタプルを使用する場合と同じ方法でこれを行うことはできないと思います。言うことはできます
—
Jared Smith
possibleKeys = ['foo', 'bar'] as const; type Keys = typeof possibleKeys[number]; type Pair = { key: Keys, value: number };
が、それでも可能なキーを明示的に列挙する必要があります。
key
属性にPair
必要な型を指定する必要があります。そうすると、記述したとおりに機能するはずです。