😊
TypeScript4.9のsatisfiesをチョット理解した
TypeScript4.9のsatisfiesをチョット理解した
TypeScript4.9くらいから追加されたsatisfies
の使い方と意味をチョット理解できたので,コードで直感的にわかるように説明してみます.
やりたいこと
const signals = [
'red',
'yellow',
'green',
'orange', // type errorにしたい
]; // 特定の色しかこの配列には入れたくないので
const color: string = 'red'; // 任意の色が入りたい
const isSignalColor = signals.includes(color); // 照合したい
as const
でしばる
type Signal = 'red' | 'yellow' | 'green';
const signals = [
'red',
'yellow',
'green',
'orange', // not error
] as const;
const color: string = 'red';
const isSignalColor = signals.includes(color); // error
❌ orange
という文字列をsignalsに追加してもエラーになりません😵
❌「型 'string' の引数を型 '"red" | "yellow" | "green" | "orange"' のパラメーターに割り当てることはできません。」というエラーでincludes
メソッドが使えません😵
as Signal[]
でしばる
type Signal = 'red' | 'yellow' | 'green';
const signals = [
'red',
'yellow',
'green',
'orange', // error
] as Signal[];
const color: string = 'red';
const isSignalColor = signals.includes(color); // error
⭕ orange
という文字列をsignalsに追加するとエラーで教えてくれます😊
❌「型 'string' の引数を型 '"red" | "yellow" | "green" | "orange"' のパラメーターに割り当てることはできません。」というエラーでincludes
メソッドが使えません😵
satisfies Signal[]
で優しくする
type Signal = 'red' | 'yellow' | 'green';
const signals: string[] = [ // assertionを併用する
'red',
'yellow',
'green',
'orange', // error
] satisfies Signal[];
const color: string = 'red';
const isSignalColor = signals.includes(color); // true
⭕ orange
という文字列をsignalsに追加するとエラーで教えてくれます😊
⭕ includes
メソッドが使えます😊
:string[]
のassertionを併用することがポイントです.
これによって型推論はstring[]
とするが,signals
の配列自体はSignal[]
の型でしばることができます.
こう考えると使いどころが増えてきそうです.
この手法が始めてsatisfies
の利用法として納得できたので記事にしてみました.
satisfies
だけに満足😊
Discussion