将函数添加到枚举

2024-01-05

是否可以在 TypeScript 中向 Enum 类型添加函数?

例如:

enum Mode {
    landscape,
    portrait,

    // the dream...
    toString() { console.log(this); } 
}

Or:

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可能是一件奇怪的事情,只是想知道这是否可能。


您可以拥有一个独立于 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将函数添加到枚举 的相关文章

随机推荐