17

I want to import js class into ts. But I got error This expression is not constructable.
and typescript compiler says that A does not have constructor signature.
how can I solve this?

index.ts

import A from "aaa";
const a = new A(); //error: this expression is not constructable.  
  
/*
and result of console.log(A); is [Function: A].

result of console.log(A.toString()); is below
class A {
  constructor(name) { this.name = name; }
}
*/

index.js in the aaa module.

class A {
  constructor(name) { this.name = name; }
}
module.exports = A;

index.d.ts in the aaa module.

export declare class A {
  constructor(name:string);

  name:string;
} 

and I can construct A in js with code below. but can't in ts.

const A = require("aaa");
const a = new A();

1 Answer 1

5

see comment below. (original)

// Note that ES6 modules cannot directly export class objects.
// This file should be imported using the CommonJS-style:
//   import x = require('[~THE MODULE~]');
//
// Alternatively, if --allowSyntheticDefaultImports or
// --esModuleInterop is turned on, this file can also be
// imported as a default import:
//   import x from '[~THE MODULE~]';
//
// Refer to the TypeScript documentation at
// https://www.typescriptlang.org/docs/handbook/modules.html#export--and-import--require
// to understand common workarounds for this limitation of ES6 modules.
Sign up to request clarification or add additional context in comments.

2 Comments

This answer could benefit from additional explanation. Why is the copy-pasted doc relevant to the question?
Besides, neither --allowSyntheticDefaultImports nor --esModuleInterop make the error go away in my case.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.