Typescript在另一个文件中扩展类

时间:2016-01-17 22:27:30

标签: typescript

我试图在另一个文件中扩展一个typescript类,如下所示:

a.ts:

module MyModule {
    public Name: string;
    export class MyClassA
    {
    }
}

b.ts:

module MyModule {
    export class MyClassB extends MyClassA
    {
    }
}

但是我收到了无法找到MyClassA的错误。

这两个文件都在我的tsconfig.json文件数组中。 我做错了什么?

4 个答案:

答案 0 :(得分:2)

将引用a.ts引用添加到b.ts文件中,如下所示:

/// <reference path="a.ts" />
module MyModule {
    export class MyClassB extends MyClassA
    {
    }
}

或使用像这样的导入:

import MyModule = require("MyModule")

答案 1 :(得分:1)

我将提供一个如何从其他.ts文件引用类的示例。

在此示例中,我们有四个.ts文件,默认情况下是模块(外部模块),第四个文件除外app.ts

Typescript Modules

  

在TypeScript中,就像在ECMAScript 2015中一样,任何包含   顶级导入或导出被视为一个模块。相反,一个文件   没有任何顶级导入或导出声明被视为a   内容在全局范围内可用的脚本(因此   模块也是如此。

实施例

我们有一个class Man和一个class Woman,它继承自class Human。 在app.ts中,我们创建了Man

的实例

<强> Human.ts

export class Human {

    public Name: string;

    constructor(name: string) {
        this.Name = name;
    }


    public WhatIsMyName() {
        console.log(`I am ${this.Name}`);
        return this.Name;
    }
}

<强> Man.ts

import { Human } from "./Human";

export class Man extends Human {
    constructor(name: string) {
        super(name);
    }
}

<强> Woman.ts

import { Human } from "./Human";

    export class Woman extends Human {
        constructor(name: string) {
            super(name);
        }
    }

<强> YourApp.ts

import { Man } from "./man";

const man = new Man("Billy The Kid");
man.WhatIsMyName();

答案 2 :(得分:0)

  

但是我收到了无法找到MyClassA的错误。

您的文件中可能有根级importexport语句。这使文件成为项目中的模块,并将其与全局名称空间断开连接。因此,文件A中的module MyModule与文件B中的 $prepare=$database->query("show columns from TABLENAME like 'allow%'"); $fetched=$prepare->fetchAll(); 不同。

这是一件好事。您不想污染全局命名空间More on modules

解决方案

学习使用模块加载器。我的推荐:webpack。

答案 3 :(得分:0)

扩展了MyModule.MyClassA似乎可以工作:

a.ts:

module MyModule {
    export class MyClassA {}
}

b.ts:

///<reference path="a.ts" />
module MyModule {
    export class MyClassB extends MyModule.MyClassA {}
}

不确定这是否在所有地方都可行,并且是否是一种好习惯。