<p>TypeScript中没有定义基于类的枚举的特定“语法”。但是这里有一个名为<code>Shape</code>的类的示例,它可以识别四种类型的形状</p>
<p><code>Shape</code>提供接受参数<code>shapeType</code>的构造函数。如果<code>shapeType</code>不是可识别的类型,<code>create</code>抛出异常</p>
<pre class="lang-js prettyprint-override"><code>class Shape {
constructor(public shapeType: number) {
if (!Shape.types.includes(shapeType)) {
throw new Error(`Value ${shapeType} is not a valid shape type.`);
}
}
static readonly rectangle: number = 0;
static readonly circle: number = 1;
static readonly triangle: number = 2;
static readonly other: number = 3;
static get types(): number[] {
return [
Shape.rectangle,
Shape.circle,
Shape.triangle,
Shape.other,
];
}
}
</code></pre>
<p><strong>用法:</strong></p>
<pre class="lang-js prettyprint-override"><code>const shape1: Shape = new Shape(Shape.triangle);
const isInstanceOf: boolean = shape1 instanceof Shape;
console.log(`Is Shape? ${isInstanceOf}; type is ${shape1.shapeType}`); // Is Shape? true; type is 2
try {
const shape2: Shape = new Shape(42);
} catch (e) {
console.log(e.message); // Value 42 is not a valid shape type.
}
</code></pre>
<p>有关可能希望从枚举移动到类的原因,请参见<a href="https://stackoverflow.com/q/469287/1497596">C# vs Java Enum (for those new to C#)</a></p>