gpt4 book ai didi

typescript - 如何从字符串创建类型并删除子字符串?

转载 作者:行者123 更新时间:2023-12-05 01:57:34 28 4
gpt4 key购买 nike

我有一个对象,其键以某些后缀结尾,我想获取没有后缀的对象的 keyof

例如其中后缀 = 'Svg'

type FooObj = {
ASvg: any
BSvg: any
CSvg: any
DSvg: any
}

type KeyofWithoutSufix = WithoutSvgSufix<keyof FooObj>
// 'A' | 'B' | 'C' | 'D'

type WithoutSvgSufix<T> = ???

如何创建 WithoutSvgSufix 类型?
我认为它需要一些条件类型和字符串文字,但我不知道那会怎样。

最佳答案

您可以使用 conditional type inferencetemplate literal types从字符串文字中去除固定后缀:

type WithoutSvgSufix<T> = T extends `${infer P}Svg` ? P : never

这会产生您想要的类型:

type KeyofWithoutSufix = WithoutSvgSufix<keyof FooObj>
// 'A' | 'B' | 'C' | 'D'

如果您传入的内容不以后缀结尾,您还没有指定您希望看到的结果;上面的定义只是为那些返回 never,所以它们完全消失了:

type Test = WithoutSvgSufix<"ESvg" | "FSVg" | "GgvS" | "HSvg">
// typo ---------------------------> ~~~~~~ ~~~~~ <-- backwards
// type Test = "E" | "H"

如果您想查看其他内容,您应该将 never 替换为您想要的任何内容。

Playground link to code

关于typescript - 如何从字符串创建类型并删除子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69122009/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com