我目前正在开发我的第一个Typescript项目。在浏览完官方文档并观看一些课程(egghead)之后,我认为是时候编写真正的代码 - 而不仅仅是样本。
我正在使用:
所以我正在研究一个节点模块。我的问题是代码结构。
以下是我的项目的样子:
src/
|____ core/
| |____ core.ts
| |____ components.ts
| |____ systems.ts
|____ input/
| |____ input.system.ts
| |____ keyboard.ts
|____ app.ts
以下是每个文件的示例:
/// <reference path="../core/components.ts" />
namespace Core {
export interface IEntity {
x: number
y: number
components: [Components.IComponent]
update(dt: number): void
}
export class Entity implements IEntity {
x: number
y: number
components: [Components.IComponent]
update(dt: number): void{
// do something with the coordinates
}
}
}
namespace Components{
export interface IComponent {
update(dt: number): void
// some other stuff here...
}
}
namespace Systems{
export interface ISystem{
update(dt: number): void
// some other stuff here...
}
}
/// <reference path="../core/systems.ts" />
namespace Systems{
export class InputSystem implements ISystem{
update(dt: number): void{
// do something here
}
// some other stuff here...
}
}
/// <reference path="../core/components.ts" />
namespace Components{
export class Keyboard implements IComponent{
update(dt: number): void{
// do something here - Catch key up / down
}
// some other stuff here...
}
}
/// <reference path="./core/core.ts" />
/// <reference path="./core/components.ts" />
/// <reference path="./core/systems.ts" />
/// <reference path="./input/input.system.ts" />
/// <reference path="./input/keyboard.ts" />
export = {Core, Components, Systems}
我想要做的是拥有3个主要名称空间Core,Components和Systems。然后,如果在另一个项目中导入了该模块,我们可以执行以下操作:
// load module from node
import * as mymodule from "mymodule"
module A {
class A extends mymodule.Core.Entity{
constructor() {
this.components.push(new mymodule.Components.Keyboard());
}
}
export function main(): void{
var systems: [mymodule.Systems.ISystem];
systems.push(new mymodule.Systems.InputSystem());
// other systems could be pushed Here
for(var system in systems){
system.update(0.5);
}
}
}
我得到的错误是在app.ts中,所有命名空间编译器都说:
cannot re export name that is not define
我在做什么有问题吗?
我还想知道我是否应该在app.ts中使用默认导出?像:
export default {Core, Components, Systems}
导入我的模块时会有帮助吗?
谢谢, 编
答案 0 :(得分:0)
不确定我的问题是否足够明确。我找到了一个解决方案,并希望你的意见。
所以,我从我的文件中删除了所有名称空间。这意味着现在我的所有文件都是模块。
然后在我的解决方案的根目录中,我创建了三个文件:
export * from "./core/core"
export * from "./core/components"
export * from "./input/keyboard"
export * from "./core/systems"
export * from "./input/input.controller"
现在在我的app.ts中,我可以简单地导入这些新文件。
import * as Core from "./_core"
import * as Components from "./_components.ts"
import * as Systems from "._/systems.ts"
export = {Core, Components, Systems}
你怎么看?这样做有什么潜在的问题吗?
谢谢, 编