为现有的 JSDOC 注释的 commonJS 库创建 Typescript 声明文件
Create Typescript declaration files for existing JSDOC annotated commonJS library
我有一个问题无法用 typescript 4.0 解决,无法为 commonJS 格式的 jsdoc 注释 javascript 库创建声明文件 (d.ts)。
如果我 运行 typescript 编译器创建 d.ts 文件时需要一个或多个对象来自多个模块,我会收到此错误:
index.js:1:1 - error TS9006: Declaration emit for this file requires using private name 'Rectangle' from module '"/Users/gabry/projects/ts-test/rectangle"'. An explicit type annotation may unblock declaration emit.
1 const {Rectangle} = require('./rectangle');
~~~~~
Found 1 error.
我可以通过在 rectangle.js 中的 class 之前添加“export”来“修复”它,但那样的话,代码在 node.js 下就不再 运行nable ...
我看到 typescript 中有一个类似 https://github.com/microsoft/TypeScript/issues/9865 的错误,应该在 typescript 4.1 beta 中解决,但安装那个版本的 typescript 我也有同样的问题,也许是错误的在我使用 commonJS require/module.exports?
的方式中
这是一个示例:
index.js
const {Rectangle} = require('./rectangle');
class Render {
constructor() {
/**
* Object list
* @type {Rectangle[]}
*/
this.objects = [];
}
/**
* Adds a rectangle
*
* @returns {Rectangle} the rect
*/
addRectangle() {
const obj = new Rectangle();
this.objects.push(obj);
return obj;
}
}
module.exports = { Render }
rectangle.js
class Rectangle {
constructor() {
console.log("I'm a rectangle!");
}
}
module.exports = { Rectangle };
这是tsconfig.json:
{
// Change this to match your project
"files": ["index.js"],
"compilerOptions": {
"allowJs": true,
"declaration": true,
"emitDeclarationOnly": true,
"outDir": "types",
"strict": false
}
}
我尝试了 adding/changing 吨 tsconfig.json 参数(目标、模块、模块解析...)但没有成功...
我可以 运行 通过带有节点的简单测试脚本没有问题:
test.js
const {Render} = require("./index");
let render = new Render();
render.addRectangle();
console.log("Objects", render.objects);
node test.js
...returns 符合预期:
I'm a rectangle!
Objects [ Rectangle {} ]
现在已在 typescript 4.1 的发布版本中修复,它确实是 typescript 编译器的一个错误,在只发出声明时发生,typescript 4.1 的第一个 beta 仍然有这个错误,但有一点每晚开始修复(请参阅原始问题中的错误以了解详细历史记录),最终在 npm 注册表上发布了最终的、有效的 v4.1。
所以如果有人仍然有这个问题,它可以简单地将他的打字稿依赖更新到最新的稳定版本 (^4.1)。
我有一个问题无法用 typescript 4.0 解决,无法为 commonJS 格式的 jsdoc 注释 javascript 库创建声明文件 (d.ts)。
如果我 运行 typescript 编译器创建 d.ts 文件时需要一个或多个对象来自多个模块,我会收到此错误:
index.js:1:1 - error TS9006: Declaration emit for this file requires using private name 'Rectangle' from module '"/Users/gabry/projects/ts-test/rectangle"'. An explicit type annotation may unblock declaration emit.
1 const {Rectangle} = require('./rectangle');
~~~~~
Found 1 error.
我可以通过在 rectangle.js 中的 class 之前添加“export”来“修复”它,但那样的话,代码在 node.js 下就不再 运行nable ...
我看到 typescript 中有一个类似 https://github.com/microsoft/TypeScript/issues/9865 的错误,应该在 typescript 4.1 beta 中解决,但安装那个版本的 typescript 我也有同样的问题,也许是错误的在我使用 commonJS require/module.exports?
的方式中这是一个示例:
index.js
const {Rectangle} = require('./rectangle');
class Render {
constructor() {
/**
* Object list
* @type {Rectangle[]}
*/
this.objects = [];
}
/**
* Adds a rectangle
*
* @returns {Rectangle} the rect
*/
addRectangle() {
const obj = new Rectangle();
this.objects.push(obj);
return obj;
}
}
module.exports = { Render }
rectangle.js
class Rectangle {
constructor() {
console.log("I'm a rectangle!");
}
}
module.exports = { Rectangle };
这是tsconfig.json:
{
// Change this to match your project
"files": ["index.js"],
"compilerOptions": {
"allowJs": true,
"declaration": true,
"emitDeclarationOnly": true,
"outDir": "types",
"strict": false
}
}
我尝试了 adding/changing 吨 tsconfig.json 参数(目标、模块、模块解析...)但没有成功...
我可以 运行 通过带有节点的简单测试脚本没有问题:
test.js
const {Render} = require("./index");
let render = new Render();
render.addRectangle();
console.log("Objects", render.objects);
node test.js
...returns 符合预期:
I'm a rectangle!
Objects [ Rectangle {} ]
现在已在 typescript 4.1 的发布版本中修复,它确实是 typescript 编译器的一个错误,在只发出声明时发生,typescript 4.1 的第一个 beta 仍然有这个错误,但有一点每晚开始修复(请参阅原始问题中的错误以了解详细历史记录),最终在 npm 注册表上发布了最终的、有效的 v4.1。
所以如果有人仍然有这个问题,它可以简单地将他的打字稿依赖更新到最新的稳定版本 (^4.1)。