gpt4 book ai didi

javascript - 如何在具有默认导出的 TypeScript 类型中描述 JavaScript 类静态工厂方法?

转载 作者:行者123 更新时间:2023-12-03 00:14:02 25 4
gpt4 key购买 nike

我正在开发一个普通的 JavaScript 库,并且有一个定义如下的 JS 类:

class MyClass {
static create() {
return new MyClass();
}

doOneThing() {
// ...
return this;
}

doOtherThing() {
// ...
return this;
}
}

module.exports = MyClass;

所以我可以使用类似 dsl 的语法:

MyClass
.create()
.doOneThing()
.doOtherThing();

我正在尝试为此类添加 d.ts 类型文件,以便其他 TypeScript 开发人员也可以使用它。到目前为止我能做到的最好的:

export interface MyClassInstance {
doOneThing(): MyClassInstance;
doOtherThing(): MyClassInstance;
}

export interface MyClassStatic {
create(): MyClassInstance;
}

declare const MyClass: MyClassStatic;
export default MyClass;

所以它适用于 TypeScript:

import MyClass from "./src/MyClass";

但是在 JavaScript 文件中,我的 IDE 通过自动完成工具提供了这个:

MyClass.default.create();

我想我可以添加强制解构,导出包装在对象中的类:

module.exports = {MyClass};

那么 TS 和 JS 的工作方式是一样的。但我宁愿不会。

所以我想知道是否有另一种方法可以做到这一点 - 在 JS 和 TS 中同时具有静态方法和默认导出工作

<小时/> 更新1

看来我可以在 .d.ts 文件中声明一个类而不是接口(interface),如下所示:

declare class MyClass {
static create(): MyClass;
doOneThing(): this;
doOtherThing(): this;
}
export default MyClass;

JS 和 TS 似乎都可以很好地使用它,但我仍在检查它是否可以,或者有点“不”或不好的做法。

<小时/>

更新2

嗯,看来这是我能得到的最好的了。我还检查了DefinitelyTyped repo并且某些模块在其类型中使用 class 声明,所以我想这是可以的。

最佳答案

检查export = and import = require()部分:

// change to
export = MyClass;

如果本身不是为了练习,您可以在 TS 中编写并将 --declaration 传递给编译器并让它生成 .d.ts 文件

关于javascript - 如何在具有默认导出的 TypeScript 类型中描述 JavaScript 类静态工厂方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54600291/

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