TS2351:如何在ts中为new函数创建构造函数类型

死神908

我正在创建一个npm包,该包默认导出一个类。这个模块是用es3编写的,但是我想提供types.ts

index.js(在我的包中)

function MyClass(p1, p2) {
  // code
}

module.exports =  MyClass;

好的,然后我创建了类型index.d.ts(在包中,除了index.js之外):

declare module 'mypackageid' {
  interface MyClass {
    new (div: HTMLElement, conf: any): MyClass;
  }
  export var MyClass: MyClass;
}

我可以在es3中轻松使用此代码,并且可以正常工作。(在我的包裹之外,例如从另一个包裹中)

var myInstance = new MyClass()

但是,如果我想从.ts文件中的另一个包中使用它:

import MyClass from 'mypackageid';

new MyClass(divReference, { // <-- error points to this line
    onBlobPaste: e=> {
      console.log(e);
    },
});

Typescript加载程序拒绝编译并打印:

TS2351:不能对类型缺少调用或构造签名的表达式使用'new'。

编辑1

您在.ts文件中使用commonjs默认导出,.d.ts文件指定了成员导出,并且您的使用者希望使用ES6默认导出。您实际上以哪种方式尝试导出它?你必须选一个

我没有显式导入类型,我希望打字稿能够自动从“ index.d.ts”自动检测类型。如果我这样使用默认导出:

declare module 'mypackageid' {
  interface MyClass {
    new (div: HTMLElement, conf: any): MyClass;
  }
  export default MyClass
}

我将在下面收到错误消息。错误指向new

S2693:“ MyClass”仅引用一种类型,但在此处被用作值。

提香·切尔尼科娃·德拉戈米尔

如果exports=在模块中使用此方法,从而替换了模块的整个导出,则需要使用import=和支持此功能的模块系统(例如AMD或commonjs)。查看文件

mypackageid.d.ts
declare module 'mypackageid' {
    class MyClass {
        constructor(div: HTMLElement, conf: any);
    }
    export = MyClass;
}


//Usage
import MyClass = require('mypackageid')

new MyClass(null, null)

另外,如果您想使用带有的接口new,那么该接口不能作为导出(因为它是一种类型),则需要声明aconst并导出该接口:

declare module 'mypackageid' {
    interface MyClassCtor {
        new (div: HTMLElement, conf: any) : {};
    }
    const MyClass : MyClassCtor;
    export = MyClass;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Julia中为结构创建构造函数?

如何在JavaScript中创建构造函数以创建构造函数?

如何解决'错误TS2351:类型不能缺少调用或构造签名的表达式不能使用'new'。

TS2351:不能对类型缺少调用或构造签名的表达式使用'new'。猫鼬

如何在 R 中创建构造函数?

如何在Kotlin Android中为数据类创建构造函数?

如何在工厂方法中为Hashmap <String Boolean>创建构造函数?

如何在 JavaScript 中为对象数组创建构造函数?

如何创建构造函数?

如何创建构造函数?

如何创建构造函数?

为多个函数创建构造函数

Yii2:如何在控制器中创建构造函数?

如何在Yii2模型中创建构造函数

Flutter:如何在我的 Style 类中创建构造函数?

在Pharo或Smalltalk中创建构造函数

如何在TS中声明函数const`f =({a = 0} = {})=> a`的类型

无法为具有模板类型参数的模板类型创建构造函数

如何在TS和TypeORM中创建泛型函数?

创建构造函数签名

创建构造函数图

为数组创建构造函数并使用自定义类型填充它

在使用过程中,如何为没有任何参数的类型创建构造函数

如何使用箭头函数创建构造函数

为不同的go结构创建构造函数

为从抽象类继承的类创建构造函数

为 hashset 和 hashmap 创建构造函数

@AllArgsConstructor 是否为静态成员创建构造函数?

由于@RequiredArgsConstructor似乎不起作用,如何使lombok为非null字段创建构造函数?