是否可以从联合类型创建一个类型,其中联合的每个元素都将根据模式进行转换?我只需要加一个前缀:

type EventNames = 'DragStart' | 'Drag' | 'DragStop'
type HandlerNames = Prefix<'on', EventNames> // 'onDragStart' | 'onDrag' | 'onDragStop'

推荐答案

是的,这是可能的.由于TypesScript 4.1,您可以将Conditional TypeTemplate Literal Type结合使用,如下所示:

type EventNames = "DragStart" | "Drag" | "DragStop";

type Prefix<K> = K extends string ? `on${K}` : K;
// --> "onDragStart" | "onDrag" | "onDragStop"

const myEvent: Prefix<EventNames> = "onDrag";

或者直接定义泛型以扩展string以传递前缀:

type EventNames = "DragStart" | "Drag" | "DragStop";

type Prefix<Prefix extends string, T extends string> = `${Prefix}${T}`;
const myEvent: Prefix<"on", EventNames> = "onDrag";

Typescript相关问答推荐

替换类型脚本类型中的多个特定字符串

类型脚本中的Gnomeshell 扩展.如何导入.ts文件

如何将绑定到实例的类方法复制到类型脚本中的普通对象?

TS不推断类型在条件判断后具有属性'

node—redis:如何在redis timeSeries上查询argmin?

如何在使用`Next—intl`和`next/link`时导航

带占位符的模板文字类型何时扩展另一个?

带switch 的函数的返回类型的类型缩小

类型,其中一条记录为字符串,其他记录为指定的

为什么在这个例子中,我把缺少的属性添加到对象中时,TypeScrip没有拾取,如何修复?

如何使用类型谓词将类型限制为不可赋值的类型?

错误TS2403:后续变量声明必须具有相同的类型.变量';CRYPTO';的类型必须是';CRYPATO';,但这里的类型是';CRYPATO';

将对象的属性转换为正确类型和位置的函数参数

类型推断对React.ForwardRef()的引用参数无效

创建依赖函数参数的类型

VITEST警告:当前的测试运行器不支持After Each/teardown挂钩

顶点堆叠的图表条形图未在正确的x轴上显示

如何从JWT Reaction中提取特定值

TS不能自己推断函数返回类型

获取类属性的类型';TypeScript中的getter/setter