我在我的项目中安装了ts-morph:
ts-morph % tree .
.
├── LICENSE
├── dist
│ └── ts-morph.js
├── lib
│ └── ts-morph.d.ts
├── package.json
└── readme.md
在lib/ts-morph.ts
中,我找到了类Project的函数:
...
getDirectories(): Directory[];
...
但当我运行到使用getDirectories()
如下将报告错误:
let tsmorph = require('ts-morph')
const { Directory } = tsmorph
const project = new tsmorph.Project();
project.addSourceFilesFromTsConfig('path/to/tsconfig.json')
console.log(Directory) // [class Directory]
const dirs: Directory[] = project.getDirectories() // this line occurs error.
dirs.forEach((item: any) => {
console.log(item.getPath())
})
错误:
"Directory" represents a value, but is used here as a type. Does it mean "type Directory"? ts(2749)
type Directory = /*unresolved*/ any
然后我把这一行改成
const dirs: typeof Directory[] = project.getDirectories()
这很有效。
但为什么它使用typeof Directory
而不是Directory
?
我也在我的demo中测试:我认为应该使用Directory
,没错。
我的演示代码如下:
class Demo {
age: number = 18;
getAge: () => {} = () => {
return this.age
}
}
let demos: Demo[] = [
new Demo(),
new Demo(),
new Demo(),
]
console.log(demos)
2条答案
按热度按时间wgx48brx1#
当你
您正在导入ts-morph.js。在你的代码中,
将
Directory
设置为类,而不是类型。nimxete22#
由于JS是动态类型的,因此所有对象(字符串,数组等)在解释器级别都被视为相同,并且仅在运行时检查类型。根据我的理解,CommonJS导入(
require
导入)将模块作为对象返回,因此它可能只是将Directory
类导出为没有TypeScript级别类型的JS类声明,而TypeScript级别类型只是一个JS值。所以我认为typeof
操作符强制TypeScript从类声明中生成类型。我认为像这样导入也应该导入类型: