首先,让我澄清一下,我正在寻找的不是联合类型,而是直接串联,即 "Hel"+ "lo"= "Hello"
但对于字符串文字类型
本质上我有一个函数,它接受两个字符串文字,一个namespace
和一个name
,并将它们与输出之间的/组合起来,但我可以'想出一种方法使输出成为字符串文字而不是通用字符串。
我需要它是一个字符串文字,因为输出将用作对象的键。
我试过类型交集(&
)、+
、.concat()
function makeKey<NS extends string, N extends string>(namespace: NS, name: N) {
return namespace + '/' + name; // <- want this to be `NS + / + N` = `NS/N`
}
// I want this to return a string literal rather than a generic string
const objKey = makeKey('admin', 'home')
// I want typeof objKey to be a string literal: `"admin/home"`, not a generic `string`
typeof objKey
是一个通用的 string
但我希望它是一个 string literal
"admin/home"
最佳答案
TS4.1+ 答案:
您现在可以使用 template literal types这样做:
function makeKey<NS extends string, N extends string>(namespace: NS, name: N) {
return namespace + '/' + name as `${NS}/${N}`
}
const objKey = makeKey('admin', 'home');
// const objKey: "admin/home"
TS4.1 之前的答案:
不幸的是答案是no . GitHub 中有几个功能建议,如果实现,可能会给你这样的功能(microsoft/TypeScript#12754 在映射类型期间增加键,或 microsoft/TypeScript#6579 通过正则表达式操作字符串类型)但我不认为它们是积极致力于。我在 roadmap 中没有看到任何内容关于它,无论如何。如果您真的想看到这种情况发生,您可能想转到其中一个 GitHub 问题并给他们一个 👍 或描述您的用例(如果它特别引人注目)。但我不会屏住呼吸。对不起!
关于javascript - 目前是否有将两个或多个字符串文字类型连接到 TypeScript 中的单个字符串文字类型的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53317721/