【问题标题】:typescript extend class with imported class带有导入类的打字稿扩展类
【发布时间】:2017-10-15 22:35:42
【问题描述】:

如果我扩展一个本地导出的类,它可以工作。

工作示例:

export class classA {

    constructor() {
        super();
    }
}

export class classB extends classA {

constructor() {
    super();

    this.do();
}

private do(): void {
    // do something
}

但是当我从文件外部导入 classA 时,它不起作用。

不工作的例子:

import { classA } from '../'; // I use index.ts file, so the reference is good.

export class classB extends classA {
    constructor() {
        super();

        this.do();
    }

    private do(): void {
        // do something
    }
}

文件结构:

Root/
- index.ts

- classA(folder)/
   - index.ts
   - classA.ts

- classB(folder)/
   - index.ts
   - classB.ts

classA文件夹内的index.ts文件:

export * from './classA';

根 index.ts 文件:

export * from './classB';
export * from './classA';

错误信息: 类 classB 扩展 _1.classA TypeError: Class extends value undefined is not a constructor or null

我需要从这个文件外部加载,因为我想在其他文件中使用 classA...知道为什么会这样吗?

[已解决]: 在根 index.ts 文件中,顺序必须是:

export * from './classA';
export * from './classB';

【问题讨论】:

  • 你能把../index.ts的代码贴出来吗?您是否将class A 导出为default
  • @rossipedia 我用文件结构和 index.ts 文件的内容更新了问题
  • 为什么不在classB中直接引用classA呢?从'../classA/classA'导入{classA};
  • 根目录下有很多文件夹,比在每个文件中写下直接引用要简单。 - 但我试了一下,可能对我有帮助。
  • 不要在问题中提出解决方案。将其发布为答案。

标签: javascript node.js typescript


【解决方案1】:

在根 index.ts 文件中,顺序必须是:

export * from './classA';
export * from './classB';

【讨论】:

    【解决方案2】:

    直接导入classA。试试这个:

    import { classA } from '../classA/classA'; 
    export class classB extends classA {
    
    constructor() {
        super();
    
        this.do();
    }
    
    private do(): void {
        // do something
    }
    

    【讨论】:

    • 我使用该文件夹中的 index.ts 文件,并在其中导出文件。
    • 那么你应该只使用一个 ./ 而不是 ../。我改变了我的代码。
    猜你喜欢
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2021-05-20
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    相关资源
    最近更新 更多