サバイバルTypeScriptに書かれているように、クラスを作るまでもないけど、値(value)と型(type)を同名にして扱いを簡単にしたいというケースで使います。これはTypeScriptは値と型は異なる空間に存在しているので、同名で扱えるということに他なりません。
<Currency.ts>
type Unit = "EUR" | "GBP" | "JPY" | "USD";
export type Currency = {
unit: Unit;
value: number;
};
export let Currency = {
from(value: number, unit: Unit): Currency {
return {
unit: unit,
value,
};
},
};
<呼び出し側>
importは共通名Currencyで、amountDueはtypeでotherAmountDueはvalueですが、同名で扱えます。
// companion object pattern
import { Currency } from "./Currency"; // works like a class
let amountDue: Currency = { // set object directly as a 'type'
unit: "JPY",
value: 12000,
};
let otherAmountDue = Currency.from(85, "EUR"); // use 'from' function as a 'value'
admin