AnDeriensのブログ

個人的なブログです

TypeScriptでEnumの代わりにas constを使う

TypeScript ではEnum型が標準で用意されているが、使いづらい。 多くの場合、Enumで列挙したいような値は、as const で代用するのがいい。

例えば、自社で扱う果物を列挙する場合、

const FRUITS = {
  APPLE: 'apple',
  ORANGE: 'orange',
  BANANA: 'banana',
} as const;

type Fruit = typeof FRUITS[keyof typeof FRUITS]; // 'apple' | 'orange' | 'banana'

と定義しておくと、使いやすいと思う。

果物の価格の定義は

const prices = {
  [FRUITS.APPLE]: 100,
  [FRUITS.ORANGE]: 200,
  [FRUITS.BANANA]: 250,
}

としておくことで、

function getPrice(fruit: Fruit) {
  return prices[fruit]
}

getPrice(FRUITS.APPLE); // 100

とできる。

Playground

https://www.typescriptlang.org/play?#code/MYewdgzgLgBAYgJQKoEkAqBlGBeGBvAKBhgEEAFMgGQFEAuGAcgEMAHFgGwFMGAaImAPIISAOQDidRiABOTMAHNufYgCFR6+gwBGc3bwIBfGEwgxQkKAG4CBKAE8WneNICuAS1i57jkADN4yOgYANoA1px2fjDenFGIqJgAupYwAPSpjKwc3DAAPlKyCjn52rpgTAw25tAwLNJuwJymuITEwfFBAHTkVNSJ9ACMAAxDyjDtgZidQqIS-TAATCNjEwkYnWoi6vMLAKyjhja+LmDAUG7gMIpQZPWNABS+rh70cM9QAJT4-NKcUC7SMC1O5NYJPdxQRKHAjVEBcTrsEDye7XW4NTj3DpTHo0D4fSxAA