javascript - 目前是否有将两个或多个字符串文字类型连接到 TypeScript 中的单个字符串文字类型的方法?

标签 javascript string typescript function types

首先,让我澄清一下,我正在寻找的不是联合类型,而是直接串联,即 "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"

Playground link


TS4.1 之前的答案:

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

关于javascript - 目前是否有将两个或多个字符串文字类型连接到 TypeScript 中的单个字符串文字类型的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53317721/

相关文章:

javascript - 当我控制台 getjson() 它返回未定义

javascript - 连接两个字符串时 += 的作用是什么? ( Eloquent JS FizzBu​​zz)

javascript - 将一种数据结构转换为另一种数据结构 JavaScript/TypeScript

angular - 缺少必需的获取参数 Angular 4

javascript - 访问导航方法 React-Big-Calendar 和 Typescript

javascript - 使用 Sweet Alert 插件的 setInterval 函数中的倒计时

javascript - 谷歌分析内容安全政策

java - 如何使用reflectionEquals检查2个对象中的所有字段是否相等?

javascript - 使用正则表达式的 JavaScript split() 中/(a|b)/和/[ab]/之间的区别

node.js - 使用 npm 定义时 tsc 如何获取其定义