How can I solve error "This Expression is not constructable"?
Asked Answered
B

1

16

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();
Broaden answered 31/7, 2020 at 9:50 Comment(0)
B
6

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.
Broaden answered 31/7, 2020 at 13:52 Comment(2)
This answer could benefit from additional explanation. Why is the copy-pasted doc relevant to the question?Diazomethane
Besides, neither --allowSyntheticDefaultImports nor --esModuleInterop make the error go away in my case.Diazomethane

© 2022 - 2024 — McMap. All rights reserved.