You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法将类名用作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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:57:01