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

时间:2018-09-04 20:53:30

标签: typescript tsc typescript3.0

说我有一个字符串数组:

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
}

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

1 个答案:

答案 0 :(得分:1)

首先,您需要获取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不会在类型系统中进行任何字符串操作,例如骆驼式的外壳。但是,您可以首先在所需类型的框内定义名称,然后在运行时将其转换为其他框。