ค้นหาเว็บไซต์

node.js - ไม่สามารถเริ่มต้นคลาสจากโมดูล TypeScript/NPM/Webpack ที่คอมไพล์แล้ว


ด้วยเหตุผลบางอย่างฉันไม่สามารถถามคำถามได้โดยไม่มีข้อผิดพลาดเกี่ยวกับโค้ดที่ไม่ได้ทำเครื่องหมายอย่างถูกต้อง ดังนั้นฉันจึงย้ายส่วนใหญ่ไปที่ GitHub ที่นี่: https://github.com/JoepBC/typescript-packages-example-error

ปัญหาสรุปได้ดังนี้: การใช้โครงสร้างแพ็กเกจตาม GitHub (ใช้ TypeScript, webpack และ ts-loader) ผมมีสองแพ็กเกจคือ LibA และ LibB ซึ่ง LibB ต้องการโหลดอ็อบเจ็กต์จากโค้ด LibA ที่คอมไพล์แล้วจาก TS->JS (.d.ts ไฟล์นิยามสำหรับ LibA ถูกสร้างขึ้นเรียบร้อยแล้ว)

โค้ดสำหรับ '~/A/src/index.ts' มีดังนี้:

import {TestExport} from './test_export.ts';
export class Foo extends TestExport {
    constructor(text:string) {
        super(text);
        console.log("added by the extended class");
    }
}
let a = new Foo('bar');

รหัสดังต่อไปนี้ของ '~/A/src/test_export.ts':

export class TestExport {
    constructor(text:string) {
        console.log("TestExport constructor argument:"+text);
    }
}

แหล่งที่มาของ '~/B/src/index.ts' คือ:

import * as LibA from 'liba';
console.log('----');
let a = new LibA.Foo('arg1');

โค้ดจาวาสคริปต์ที่สร้างขึ้นสำหรับ Lib A ทำงานตามที่คาดไว้ Lib B พยายามนำเข้า (import) จาก A (ในขณะที่ A นำเข้าจากไฟล์อื่น [แม้จะไม่ได้คอมไพล์] ภายในแพ็กเกจเดียวกันได้อย่างปกติ) และโค้ดจาวาสคริปต์จาก A สามารถรันภายใน B ได้ แต่ใน B ฉันไม่สามารถสร้างออบเจกต์ใหม่จากคลาสใน A ได้

ผลลัพธ์เมื่อรัน B คือ:

~/B/dist $ node index.js 
TestExport constructor argument:bar
added by the extended class
----
webpack:///./src/index.ts?:5
var a = new LibA.Foo('arg1');
        ^
TypeError: LibA.Foo is not a constructor
    at eval (webpack:///./src/index.ts?:5:9
    at Object../src/index.ts (~/B/dist/index.js:108:1)
    at __webpack_require__ (~/B/dist/index.js:20:30)
    at ~/B/dist/index.js:84:18
    at Object. (~/B/dist/index.js:87:10)
    at Module._compile (module.js:641:30)
    at Object.Module._extensions..js (module.js:652:10)
    at Module.load (module.js:560:32)
    at tryModuleLoad (module.js:503:12)
    at Function.Module._load (module.js:495:3)

วิธีต่างๆ ในการเรียกใช้งาน/นำเข้า A ภายใน B ดูเหมือนว่าจะใช้ไม่ได้เช่นกัน... ควรทำอย่างไรดี? ขอบคุณล่วงหน้า