将字符串数组转换为TypeScript类型

将字符串数组转换为TypeScript类型,typescript,tsc,typescript3.0,Typescript,Tsc,Typescript3.0,假设我有一个字符串数组: const s = ['foo', 'rolo', 'zoombaz']; 所以我会得到: type v = { foo: string, rolo: string, zoombaz: string } type v = { foo: string, rolo: string, zoomBaz: string } 奖励:理想情况下,我希望将它们映射到camel case,因此如果我有: const s = ['foo',

假设我有一个字符串数组:

const s = ['foo', 'rolo', 'zoombaz'];
所以我会得到:

type v = {
   foo: string,
   rolo: string,  
   zoombaz: string
}
type v = {
   foo: string,
   rolo: string,  
   zoomBaz: string
}
奖励:理想情况下,我希望将它们映射到camel case,因此如果我有:

const s = ['foo', 'rolo', 'zoom-baz'];
我会得到:

type v = {
   foo: string,
   rolo: string,  
   zoombaz: string
}
type v = {
   foo: string,
   rolo: string,  
   zoomBaz: string
}

在某些情况下,我会告诉它使用布尔值而不是字符串。这是用于命令行解析器的。

首先,您需要获取TypeScript,以将数组的元素类型推断为字符串文本类型的并集,而不是扩展到
字符串。编译器支持的标准技巧是通过一个identity函数运行数组,该函数推断受
string
约束的元素类型:

function asLiterals<T extends string>(arr: T[]): T[] { return arr; }
const s = asLiterals(['foo', 'rolo', 'zoombaz']);

TypeScript不会在类型系统中执行任何字符串操作,如驼峰式大小写。但是,您可以首先在您想要的大小写中定义类型的名称,然后在运行时转换为任何其他大小写。

谢谢,我不知道
s[number]
在做什么?这应该被解析为
(typeof s)[number]
;我加了括号。给定数组的类型,它将获得数组元素的类型。是的,我仍然不理解符号
[number]
在做什么?
(typeof s)[number]
是一种(也称为查找类型)它获取通过索引
types
得到的类型,索引类型为
number
然后
常量s=asLiterals(myList),它不再检查类型。有什么区别?