为何无法将类名用作TypeScript类型注解?ts-morph使用疑问
问题原因解析
1. 自定义类的双重身份
你自己写的Demo类,在TypeScript里是双重角色:它既是运行时的构造函数(值),也是编译时的实例类型。所以你可以直接用Demo[]来注解数组类型,TypeScript能自动识别这个类型。
2. ts-morph中Directory的特殊导出方式
ts-morph里的Directory并不是一个标准的class类型导出,而是一个仅作为值存在的对象/构造器,没有被显式导出对应的类型别名或接口。
当你看到getDirectories()方法的返回类型标注为Directory[],这其实是ts-morph内部用typeof Directory(或者内部定义的同名类型别名)做的类型声明,但对外没有把Directory作为类型暴露出来。所以你在自己的代码里直接用Directory时,TypeScript只能找到它作为“值”的定义,就会报错说它是值而非类型。
3. 为什么typeof Directory[]能生效
typeof Directory会获取到这个“值”的类型,用它来注解数组typeof Directory[],本质上是告诉TypeScript:这个数组里的元素类型和Directory这个值的类型一致,所以编译能通过。
验证方法
你可以去ts-morph的dist目录下找对应的类型定义文件(比如directory.d.ts),如果看到Directory是用const、function或者非class的方式导出的,就说明它确实没有对应的类型暴露,必须用typeof来获取类型。
内容的提问来源于stack exchange,提问作者qg_java_17137
相关产品推荐
相关产品推荐

