我想用编程的方式创建这样的类型文件:
export type Car = {
color: string;
// ... tons of properties
};
使用ts-morph
addTypeAlias方法似乎很容易做到这一点:
sourceFile.addTypeAlias({
name: 'Car',
type: theType,
isExported: true,
});
虽然不幸的是这里的theType
必须是string | WriterFunction
。而且我希望它是一个TypeLiteral!有什么方法可以用我缺少的ts-morph
来实现这个目的吗?当然我可以通过一些循环和字符串连接等方法将我的类型文本构造为字符串,但我真的希望避免这样构建我的文件-那么我还不如使用模板/存根文件和fs。
有没有其他更程序化/基于节点类的方法来实现这一点?
2条答案
按热度按时间2ledvvac1#
可以使用typescript库中的TypeLiteral类型定义类型Car的属性,然后将其作为类型参数传递给tsmorph中的addTypeAlias方法。
ulydmbyx2#
简介
让我们将以下Node.js版本视为当前版本:
让我们把下面的npm版本当作当前版本:
让我们将依赖项的以下版本视为当前版本(摘自
package.json
文件):概述
虽然不幸的是这里的
theType
必须是string | WriterFunction
。而且我希望它是一个TypeLiteral!有没有办法用我缺少的ts-morph
来实现这一点?目前,似乎没有直接的解决办法。
请参阅以下看似相关的GitHub问题:
有没有其他更程序化/基于节点类的方法来实现这一点?
让我们考虑一些可能的解决方案。
可能的解决方案:
ts-morph
:使用对象类型编写器(Writers.objectType()
静态方法)它可能被认为更具有编程性,但它仍然是一种基于编写器(而不是基于节点)的方法。
参考文献:
Writers.objectType()
静态方法. ts-变形/作者. ts at 17.0.1·dsherret/ts-变形。草稿示例
src/index-ts-morph.ts
文件运行脚本并检查其输出
请注意这个奇怪的凹痕。
可能是
ts-morph
缺陷造成的?可能的解决方案:
typescript
:使用typescript
代替ts-morph
参考文献:
草稿示例
src/index-typescript.ts
文件运行脚本并检查其输出