我试图在另一个文件中扩展一个typescript类,如下所示:
a.ts:
module MyModule {
public Name: string;
export class MyClassA
{
}
}
b.ts:
module MyModule {
export class MyClassB extends MyClassA
{
}
}
但是我收到了无法找到MyClassA的错误。
这两个文件都在我的tsconfig.json文件数组中。 我做错了什么?
答案 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中,就像在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的错误。
您的文件中可能有根级import
或export
语句。这使文件成为项目中的模块,并将其与全局名称空间断开连接。因此,文件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 {}
}
不确定这是否在所有地方都可行,并且是否是一种好习惯。