gpt4 book ai didi

javascript - 由于使用私有(private)名称,不会发出声明

转载 作者:行者123 更新时间:2023-12-01 17:18:46 27 4
gpt4 key购买 nike

我正在尝试将项目转换为 TypeScript,并且我已经设置了大部分内容,但我仍在努力将最后几部分放在一起。我希望能够从一个普通的 JavaScript 项目中使用这个 TypesScript 项目,所以我的理解是我需要为我现有的源发出 d.ts 文件。我的源目前都是 .js,我们计划随着时间的推移慢慢迁移到 TS。我的问题是让声明与当前的 export/require 语句一起发出。

问题的简单演示:

mod1.js

class MyClass {
constructor(name) {
this.name = name;
}
}

module.exports = {
MyClass,
};

mod2.js
const mod1 = require('./mod1');

module.exports = {
MyClass: mod1.MyClass,
};

当我尝试在 mod2 中导出 MyClass 以重新路由命名空间时,可以在使用项目时访问 MyClass,我得到 Declaration emit for this file requires using private name 'MyClass' from module '"mod1"'. An explicit type annotation may unblock declaration emit.ts(9006)
我们的代码库中有很多重新路由,包含各种类的文件组,然后我们在每个目录级别使用 index.js 文件来定义该命名空间中可用的项目,有时还有一堆 UI 元素它们是实例化的类实例,因此我们可以进行如下调用:
const {app, appui} = require('our-cool-app');
app.feature1.doSomething();
appui.component.someButton.click();

是否有一个简单的解决方法可以让我们的 d.ts 文件从 .js 源自动生成?

最佳答案

我通过添加 JSDoc @type 解决了这个问题。在有问题的事情上方发表评论。在我的例子中,我有一个类有一个 getter,它返回一个不同的类,任何使用 getter 都会产生这个错误。 YMMV。
所以这...

// File Foo.js
class Foo {
get Bar() {
return Bar;
}
}
class Bar {};

// File Blah.js
const Foo = require('./Foo.js');
class Blah extends Foo.Bar {} <--- Error would be here
被这个固定了...
/**
* @type Class
*/
get Bar() {
return Bar;
}

关于javascript - 由于使用私有(private)名称,不会发出声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60009092/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com