在多个TypeScript文件中声明并使用相同的命名空间
我是TypeScript新手,在多个文件中使用同一名称空间时遇到问题: 文件model.ts在多个TypeScript文件中声明并使用相同的命名空间,typescript,namespaces,typescript-typings,Typescript,Namespaces,Typescript Typings,我是TypeScript新手,在多个文件中使用同一名称空间时遇到问题: 文件model.ts export namespace MyCompany { export class Model { ... } } 文件webviewer.ts import { Model } from './model'; export namespace MyCompany { model : Model; export class WebViewer { us
export namespace MyCompany {
export class Model {
...
}
}
文件webviewer.ts
import { Model } from './model';
export namespace MyCompany {
model : Model;
export class WebViewer {
use() : void {
this.model = new Model();
...
}
...
}
}
import { Model } from './model';
export class WebViewer {
private model: Model;
use(): void {
this.model = new Model();
}
}
export namespace MyCompany {
export class WebViewer {
model : Model;
use() : void {
this.model = new Model();
}
}
}
文件索引.ts
import { WebViewer } from './webviewer';
let webviewer = new WebViewer();
webviewer.use();
我在MyCompany.WebViewer类和index.ts文件中找不到任何关于如何使用MyCompany.Model的文档
下面的文档包含许多示例,但没有一个涉及我的情况,即在同一库的多个文件中声明并使用同一名称空间
更新
现在我问自己在每个文件中使用名称空间是否合适。可能有一种方法可以使用.d.ts文件,其中类可以在名称空间内导出,因此稍后可以将库作为Acme.WebViewer等使用。名称空间的基本思想是避免命名冲突(如果您或团队中的其他开发人员需要另一个模型类,但不知道您的模型类怎么办?) 随着模块的引入,名称空间变得有点过时,因为它们以更优雅的方式解决问题。您可以只执行以下操作并完全跳过名称空间: model.ts
export class Model {
// ...
}
export namespace MyCompany {
export class Model {
...
}
}
webviewer.ts
import { Model } from './model';
export namespace MyCompany {
model : Model;
export class WebViewer {
use() : void {
this.model = new Model();
...
}
...
}
}
import { Model } from './model';
export class WebViewer {
private model: Model;
use(): void {
this.model = new Model();
}
}
export namespace MyCompany {
export class WebViewer {
model : Model;
use() : void {
this.model = new Model();
}
}
}
索引
import { WebViewer } from './webviewer';
let webviewer = new WebViewer();
webviewer.use();
let webviewer = new MyCompany.WebViewer();
webviewer.use();
在使用名称空间时,可以省略导入。从命名空间外部调用对象时,必须将其包含在调用中:
let m=new MyCompany.Model()
。您在webviewer中也有输入错误(模型变量必须在类中声明)
model.ts
export class Model {
// ...
}
export namespace MyCompany {
export class Model {
...
}
}
webviewer.ts
import { Model } from './model';
export namespace MyCompany {
model : Model;
export class WebViewer {
use() : void {
this.model = new Model();
...
}
...
}
}
import { Model } from './model';
export class WebViewer {
private model: Model;
use(): void {
this.model = new Model();
}
}
export namespace MyCompany {
export class WebViewer {
model : Model;
use() : void {
this.model = new Model();
}
}
}
索引
import { WebViewer } from './webviewer';
let webviewer = new WebViewer();
webviewer.use();
let webviewer = new MyCompany.WebViewer();
webviewer.use();
我想我了解你,我的朋友,你找到解决办法了吗? 我有一个js项目,我正在尝试移植到ts。 我有名称空间表示,并尝试在另一个视图中使用一个视图 Presentation.User-->Presentation.Profile 在用户界面中显示配置文件界面 我能做的就是这样
export namespace Presentation{
export class Profile{}
}
用这种方式
import {Presentation as _Presentation} from 'Profile';
export namespace Presentation{
export class User{
profileView:_Presentation.Profile;
}
}
希望您能找到更好的方法当我第一次开始使用Typescript时,我发现使用webpack或browserify的整个构建过程相当可怕。在学习Typescript时,名称空间是一个很好的中间地带,您的示例中使用了哪些模块?我看到的唯一变化是:模型字段上的私有访问器和名称空间的删除(我对TS很陌生,很抱歉提出了一些愚蠢的问题)。我认为模块必须明确声明