首先,让我明确指出,我要寻找的不是联合类型,而是直接连接,即"Hel" + "lo" = "Hello",而是字符串文字类型

本质上,我有一个函数,它接受两个字符串文本,一个namespace和一个name,并将它们与a/in之间的字符组合作为输出,但我无法找到一种方法使输出成为字符串文本而不是一般字符串.

我需要它是字符串文字,因为输出将用作对象的键.

我试过输入交叉点(&)、+.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里看不到任何关于它的东西.如果你真的想看到这种情况发生,你可能想go 看看那些GitHub问题中的一个,给他们一个? 或者描述你的用例,如果它特别引人注目的话.但我不会屏住呼吸.对不起的!

Typescript相关问答推荐

如何获取嵌套对象属性的正确类型?

类型缩小对(几乎)受歧视的unions 不起作用

为什么在TypScript中写入typeof someArray[number]有效?

TypScript手册中的never[]参数类型是什么意思?

VS代码1.88.0中未出现自动导入建议

类型脚本泛型最初推断然后设置

为什么TypeScript失go 了类型推断,默认为any?''

React typescribe Jest调用函数

在NextJS中获得Spotify Oauth,但不工作'

是否使用非显式名称隔离在对象属性上声明的接口的内部类型?

打字类型保护递归判断

我可以以这样一种方式键入对象,只允许它的键作为它的值吗?

返回嵌套props 的可变元组

ANGLE订阅要么不更新价值,要么不识别价值变化

有没有可能创建一种类型,强制在TypeScrip中返回`tyPeof`语句?

Typescript,如何在通过属性存在过滤后重新分配类型?

接口中可选嵌套属性的类型判断

来自枚举的<;复选框和组件列表

Typescript 和 Rust 中跨平台的位移数字不一致

为什么 Typescript 无法正确推断数组元素的类型?