以下代码可用于enum在TypeScript中创建:
enum e {
hello = 1,
world = 2
};
Run Code Online (Sandbox Code Playgroud)
并且可以通过以下方式访问这些值:
e.hello;
e.world;
Run Code Online (Sandbox Code Playgroud)
如何创建enum带字符串值?
enum e {
hello = "hello", // error: cannot convert string to e
world = "world" // error
};
Run Code Online (Sandbox Code Playgroud) 我正在为我无法控制的库编写类型声明文件。其中一个方法接受一个字符串数组作为参数,但这些字符串只能是非常具体的值。目前我正在将此参数输入为 a string[],但我想知道是否有办法增强它以包含特定值。
示例源(我无法更改):
Fruits(filter) {
for (let fruit of filter.fruits)
{
switch(fruit)
{
case 'Apple':
...do stuff
case 'Pear':
...do stuff
default:
console.error('Invalid Fruit');
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
我当前的类型声明:
function Fruits(filter: FruitFilter): boolean;
interface FruitFilter {
fruits: string[];
}
Run Code Online (Sandbox Code Playgroud)
在我写这个问题时,我想出了一个部分解决方案,即定义有效字符串的联合类型,然后将该字段的类型设置为该联合的数组而不是字符串数组。这给了我想要的检查,但我注意到如果你输入一个无效的字符串,它会将数组中的所有字符串标记为无效,并显示错误Type 'string' is not assignable to type 'Fruit'。有没有更好的方法来做到这一点,以便只有违规的字符串被标记为无效,或者这与我将要得到的一样接近?
部分解决方案:
function Fruits(filter: FruitFilter): boolean;
type Fruit = 'Apple' | 'Pear'
interface FruitFilter {
fruits: Fruit[];
}
Run Code Online (Sandbox Code Playgroud) 假设我有一个具有以下类型的变量:
let weekDay: 'Sun' | 'Mon' | 'Tue' | 'Wed' | 'Thu' | 'Fri' | 'Sat';
Run Code Online (Sandbox Code Playgroud)
在我的项目的不同地方我都使用这种类型,所以每次我写:
function setDay(day: 'Sun' | 'Mon' | 'Tue' | 'Wed' | 'Thu' | 'Fri' | 'Sat') { ... }
function getDay(): 'Sun' | 'Mon' | 'Tue' | 'Wed' | 'Thu' | 'Fri' | 'Sat' { ... }
Run Code Online (Sandbox Code Playgroud)
我怎样才能定义这个新类型一次,这样我就不需要每次都编写它。我尝试定义 aninterface但它会创建一个对象类型,并以此类型作为每个属性之一,但这不是我想要的
interface iWeekDay {
day: 'Sun' | 'Mon' | 'Tue' | 'Wed' | 'Thu' | 'Fri' | 'Sat';
}
Run Code Online (Sandbox Code Playgroud)