TypeScript の Enum 型に関数を追加することは可能ですか?
例えば:
enum Mode {
landscape,
portrait,
// the dream...
toString() { console.log(this); }
}
または:
class ModeExtension {
public toString = () => console.log(this);
}
enum Mode extends ModeExtension {
landscape,
portrait,
}
もちろん、toString()
関数には次のようなものが含まれますがswitch
、ユースケースは次のようになります。
class Device {
constructor(public mode:Mode) {
console.log(this.mode.toString());
}
}
を延長することが奇妙なことである理由は理解していますがenum
、それが可能かどうか疑問に思っています。
ベストアンサー1
Enum とは別のクラスを用意してそれを使用して必要なものを取得することも、名前空間を Enum にマージして、すべてを同じ場所のように見える場所で取得することもできます。
モードユーティリティクラス
したがって、これはまさにあなたが求めているものではありませんが、これにより、静的メソッドを使用して「モードから文字列」の動作をカプセル化することができます。
class ModeUtil {
public static toString(mode: Mode) {
return Mode[mode];
}
}
次のように使用できます:
const mode = Mode.portrait;
const x = ModeUtil.toString(mode);
console.log(x);
モード列挙型/名前空間のマージ
名前空間を Enum とマージして、追加のメソッドを持つ Enum のようなものを作成できます。
enum Mode {
X,
Y
}
namespace Mode {
export function toString(mode: Mode): string {
return Mode[mode];
}
export function parse(mode: string): Mode {
return Mode[mode];
}
}
const mode = Mode.X;
const str = Mode.toString(mode);
alert(str);
const m = Mode.parse(str);
alert(m);