说我有清单
const list = ['a', 'b', 'c']
是不是可以从这个值的联合类型派生出来的'a' | 'b' | 'c'
?
我想要这个,因为我想定义只允许来自静态数组的值的类型.而且我还需要在运行时枚举这些值,所以我使用数组.
示例如何使用索引对象实现:
const list = ['a', 'b', 'c']
'a' | 'b' | 'c'
const list = ['a', 'b', 'c']
但我想知道没有这个索引地图是否可行.
const names = ['jacob', 'master jung', 'kyuhyun'] as const;
type Names = typeof names[number];
Run Code Online (Sandbox Code Playgroud)
我得到了我想要的结果,但我不明白typeof names[number]
。
Typescript 中的意思是什么typeof Array[number]
?
例:
向我解释keyof typeof
TypeScript的含义
enum ColorsEnum {
white = '#ffffff',
black = '#000000',
}
type Colors = keyof typeof ColorsEnum;
Run Code Online (Sandbox Code Playgroud)
最后一行等效于:
type Colors = "white" | "black"
Run Code Online (Sandbox Code Playgroud)
但是它是如何工作的呢?
我希望typeof ColorsEnum
返回类似的内容"Object"
,然后keyof "Object"
不做任何有趣的事情。但是我显然是错的。
我正在尝试检查变量是否属于某种类型。
代码:
type GeneralType = SubTypeA | SubTypeB;
type SubTypeA = 'type1' | 'type2';
type SubTypeB = 'type3' | 'type4';
function someFunction(arg1: GeneralType) {
if (arg1 instanceof SubTypeA) {
// Do something
}
// Continue function
return arg1;
}
Run Code Online (Sandbox Code Playgroud)
当然,这段代码在第 6 行失败了,因为instanceof
它不能用于类型。有没有我可以使用的替代选项,而无需明确检查 的每个可能值SubTypeA
?
我想检查是否str
在Name
是否可以?
/* imagination code */
type Name = 'a1' | 'a2' | .... | 'z100';
function isName(str: string): str is Name {
switch (str) {
case 'a1':
case 'a2':
// ...
case 'z100':
return true;
default:
return false;
}
}
isName('alice') // -> true or false
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种从 ENUM 值创建 Typescript 类型的方法。目前,我必须手动构造类型并使其与 ENUM 保持同步。
有没有办法从 ENUM 值创建一个类型作为 oneof ?最终结果是当我更新 ENUM 时,类型将自动反映它
enum FRUITS {
APPLE = 'apple',
PEAR = 'pear',
ORANGE = 'orange',
}
// type Fruits = FRUITS;
type Fruits = 'apple' | 'pear' | 'orange';
// This works
const fruit: Fruits = FRUITS.APPLE;
// This also works
const fruit2: Fruits = 'apple';
Run Code Online (Sandbox Code Playgroud)
该类型将在这些场景中使用,因此两者都必须仍然有效:
const fruit: Fruits = FRUITS.APPLE;
const fruit2: Fruits = 'apple';
Run Code Online (Sandbox Code Playgroud)