从字符串值生成打字稿类型

时间:2019-07-29 13:25:47

标签: typescript

是否可以从字符串值创建打字稿类型?
像这样

const typeName = 'number';
type myType = typeName;
const x: myType = 5;

2 个答案:

答案 0 :(得分:1)

即使对于内置类型,实际上也不可能从类型名称转换为打字稿中的类型。您可能会考虑在名称和类型之间创建映射接口。然后,从名称到类型将需要一个简单的类型索引查询:

interface TypeMap {
    number: number,
    string: string,
    boolean: boolean,
    // etc
}
const typeName = 'number';
type myType = TypeMap[typeof typeName];
const x: myType = 5;

编辑,我们需要typeof typeName(而不是typeName中的TypeMap[typeof typeName]),因为类型索引查询适用于类型(不适用于变量等值)。但是,我们可以使用typeof类型运算符获取任何变量的类型。

答案 1 :(得分:1)

在运行时动态地为API生成类型并不是很有用,因为那时为时已晚,您不妨使用any

听起来您想要做的是为API生成类型作为预构建步骤。

为此,有几种选择,一种是使用诸如openapi3之类的格式编写API规范,然后使用代码生成工具生成API客户端/粘合代码。这是我在多个项目中采用的方法,并且效果很好,但是您有时必须与生成器作战。

也有一些工具可以从JSON blob生成JSON模式,然后从JSON模式生成打字稿类型。同样,它们也不是完美的,但是通常这可能是一种快速简便的方法来为API设置脚手架类型,然后您可以手动进行优化。

参考: https://openapi.tools/ https://quicktype.io/typescript/