如何在两个文件中有一个类和超类(Typescript)

Posted

技术标签:

【中文标题】如何在两个文件中有一个类和超类(Typescript)【英文标题】:how to have a class and superclass in two files (Typescript) 【发布时间】:2016-06-14 23:59:00 【问题描述】:

如何在 TypeScript 中将一个类 + 子类拆分为两个文件?

// MongoModel.js
class MongoModel 
   ...

export = MongoModel;

然后在另一个文件中:

import MongoModel = require("./MongoModel");

但这会报错File ....MongoModel.ts is not a module

我是否需要使用一些模块语法将它们捆绑在一起,比如 Java 包?

【问题讨论】:

您是否在编译器选项中使用es6 目标?如果是这样,您必须像这样导出:export class MongoModel ... 并删除 export=MongoModel。你可以这样导入它:import MongoModel from './MongoModel' 或者您可以使用:export default class MongoModel ... 并导入它:import MongoModel from './MongoModel'。像这样,您可以在导入时重命名该类,例如import BaseMongoModel from './MongoModel' 这些看起来很有帮助。添加答案,以便我接受! 【参考方案1】:

当您在编译器配置中定位 es5 时,您用于导出和导入模块的版本有效。

定位es6时,您有以下方式导出/导入模块:

// in MongoClass.ts
export class MongoClass 
    // ... code here


// and in other file
import MongoClass from '/path/to/MongoClass';

或者你可以使用default export;

// in MongoClass.ts
export default class MongoClass  ... 
export const somethingElse = 5;

// and import in some other file
// note that MongoClass can be renamed when is exported as default exported member
import BaseMongo from '/path/to/MongoClass';

// this cannot be renamed when importing
import somethingElse from '/path/to/MongoClass'; 

【讨论】:

以上是关于如何在两个文件中有一个类和超类(Typescript)的主要内容,如果未能解决你的问题,请参考以下文章

java中基类和超类的区别

__new__、__init__ 和元类(和超类)

当子类和超类在不同的包中时,如何在java中继承一个类

再谈 Java 的继承和超类 Object

为什么说Java中要慎重使用继承

第6章:继承和抽象类