带有导入类的打字稿扩展类
Posted
技术标签:
【中文标题】带有导入类的打字稿扩展类【英文标题】: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;
根目录下有很多文件夹,比在每个文件中写下直接引用要简单。 - 但我试了一下,可能对我有帮助。
不要在问题中提出解决方案。将其发布为答案。
【参考方案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 文件,并在其中导出文件。 那么你应该只使用一个 ./ 而不是 ../。我改变了我的代码。以上是关于带有导入类的打字稿扩展类的主要内容,如果未能解决你的问题,请参考以下文章