将字符串数组转换为 TypeScript 类型
Convert array of strings to TypeScript type
假设我有一个字符串数组:
const s = ['foo', 'rolo', 'zoombaz'];
所以我会得到:
type v = {
foo: string,
rolo: string,
zoombaz: string
}
奖励:理想情况下,我希望将它们映射到驼峰式大小写,所以如果我有:
const s = ['foo', 'rolo', 'zoom-baz'];
我会得到:
type v = {
foo: string,
rolo: string,
zoomBaz: string
}
在某些情况下,我想告诉它使用布尔值而不是字符串。这是一个命令行解析器。
首先,您需要让 TypeScript 将数组的元素类型推断为字符串文字类型的联合,而不是扩大到 string
。编译器支持的标准技巧是通过恒等函数 运行 数组,该恒等函数推断受 string
:
约束的元素类型
function asLiterals<T extends string>(arr: T[]): T[] { return arr; }
const s = asLiterals(['foo', 'rolo', 'zoombaz']);
现在您可以定义:
type v = {[K in (typeof s)[number]]: string};
TypeScript 不会在类型系统中进行任何字符串操作,例如驼峰式大小写。但是,您最初可以在类型的大小写中定义名称,然后在 运行 时间转换为任何其他大小写。
假设我有一个字符串数组:
const s = ['foo', 'rolo', 'zoombaz'];
所以我会得到:
type v = {
foo: string,
rolo: string,
zoombaz: string
}
奖励:理想情况下,我希望将它们映射到驼峰式大小写,所以如果我有:
const s = ['foo', 'rolo', 'zoom-baz'];
我会得到:
type v = {
foo: string,
rolo: string,
zoomBaz: string
}
在某些情况下,我想告诉它使用布尔值而不是字符串。这是一个命令行解析器。
首先,您需要让 TypeScript 将数组的元素类型推断为字符串文字类型的联合,而不是扩大到 string
。编译器支持的标准技巧是通过恒等函数 运行 数组,该恒等函数推断受 string
:
function asLiterals<T extends string>(arr: T[]): T[] { return arr; }
const s = asLiterals(['foo', 'rolo', 'zoombaz']);
现在您可以定义:
type v = {[K in (typeof s)[number]]: string};
TypeScript 不会在类型系统中进行任何字符串操作,例如驼峰式大小写。但是,您最初可以在类型的大小写中定义名称,然后在 运行 时间转换为任何其他大小写。