Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在多个TypeScript文件中声明并使用相同的命名空间_Typescript_Namespaces_Typescript Typings - Fatal编程技术网

在多个TypeScript文件中声明并使用相同的命名空间

在多个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

我是TypeScript新手,在多个文件中使用同一名称空间时遇到问题:

文件model.ts

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很陌生,很抱歉提出了一些愚蠢的问题)。我认为模块必须明确声明