无论如何,目前在TypeScript中现在是否可以将两个或多个字符串文字类型连接为单个字符串文字类型?

首先,让我说清楚,我要查找的不是联合类型,而是直接的串联,即"Hel" + "lo" = "Hello"字符串文字类型

本质上,我有一个函数,它接受两个字符串文字,a namespace和a 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"

Tony凯2020/05/28 14:54:00

不幸的是,答案是否定的GitHub上提出了一些功能建议,如果实施了这些建议,可能会为您提供这种功能(thisthis),但是我认为它们并未得到积极的研究。无论如何,我在路线图中看不到任何东西如果您真的想看到这种情况发生,那么您可能想转到其中一个GitHub问题,给他们一个👍或描述它的用例(如果它特别引人注目)。但是我不会屏住呼吸。抱歉!

小胖Gil2020/05/28 14:54:00

它对我来说是有效的,使用 TypeScript3.7.2,使用模板文字进行连接,并使用as关键字指定函数的输出类型。

const addSuffixToMyStringLiteral =
    (m: MyStringLiteral, suffix: string) => `${m}${suffix}` as MyStringLiteral;

我不知道它是否是 TypeScript的新功能。