目前有没有办法将两个或多个字符串文字类型连接到TypeScrip中的单个字符串文字类型? [英] Is there currently anyway to concatenate two or more string literal types to a single string literal type in TypeScript right now?

查看:21
本文介绍了目前有没有办法将两个或多个字符串文字类型连接到TypeScrip中的单个字符串文字类型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,让我明确一下,我要查看的不是联合类型,而是直接连接类型,即"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`

typeofobjKey是泛型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"

Playground link


TS4.1之前的答案:

答案不幸的是no。GitHub中有几个特性建议,如果实现,可能会为您提供这样的功能(microsoft/TypeScript#12754在映射类型期间增强键,或microsoft/TypeScript#6579通过正则表达式操作字符串类型),但我认为它们并没有得到积极的处理。无论如何,我在roadmap中没有看到任何关于它的东西。如果你真的想看到这种情况发生,你可能想去GitHub的某个问题上给他们一个👍,或者描述一下你的用例,如果它特别引人注目的话。但我不会屏住呼吸。对不起!

这篇关于目前有没有办法将两个或多个字符串文字类型连接到TypeScrip中的单个字符串文字类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆