首先,让我说清楚我正在寻找的不是联合类型,而是直接连接,即"Hel" + "lo" = "Hello"字符串文字类型
本质上,我有一个函数,它接受两个字符串文字 anamespace和 a name,并将它们与中间的 / 组合作为输出,但我无法找到一种方法使输出成为字符串文字而不是通用字符串。
我需要它是一个字符串文字,因为输出将用作对象的键。
我试过输入intersections( &), +,.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 …Run Code Online (Sandbox Code Playgroud) 我想编写一个函数,该函数接受带有蛇形大小写键的对象并将其转换为带有驼色大小写键的对象。假设我们知道输入对象的类型,但希望解决方案是通用的,那么在 TypeScript 中输入此类函数的最佳方式是什么?
type InputType = {
snake_case_key_1: number,
snake_case_key_2: string,
...
}
function snakeToCamelCase(object: T): U {
...
}
Run Code Online (Sandbox Code Playgroud)
键入T和U.
我想U尽可能窄地键入,并且理想地U基于的类型T。
理想情况下,如果T是我的示例,InputType我希望将 U 输入为
{
snakeCaseKey1: number,
snakeCaseKey2: string,
...
}
Run Code Online (Sandbox Code Playgroud) 我有大量从 proto 文件生成的打字稿类型。这些类型的属性是驼峰式的,我的 proto 文件(和 api)是蛇形的。
我想避免将我的 api 数据转换为驼峰格式以满足我的类型约束。我试图找出一种使用映射类型将类型键从骆驼更改为蛇案例的方法。
例如:
生成类型
type g = {
allTheNames: string
}
type SnakePerson = {
firstName: string
lastName: string
name: g
Run Code Online (Sandbox Code Playgroud)
所需类型
{
first_name: string
last_name: string
g: { all_the_names: string }
}
Run Code Online (Sandbox Code Playgroud)
我进行了尝试,但我对打字稿和映射类型相当陌生
type ToSnakeCase<K extends string, T> = {
[snakeCase([P in K])]: T[P]
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,包括告诉我这是不可能的,都将不胜感激。