Я новичок в машинописи, и я много читал о машинописи и синглетонах, и я все еще могу заставить их работать.
У меня такая же проблема, как эта:
Node.js и Typescript Шаблон Singleton: похоже, что Singleton не используется совместно пользователями Singleton .
Я тоже читал эту статью: https://fullstack -developer.academy / singleton-pattern-in-typcript /
и этот: http://www.codebelt.com/typescript/typescript-singleton-pattern/
В конце концов, когда я перехожу из модуля в другой, кажется, что мой одноэлементный класс всегда находится в состоянии по умолчанию.
При вызове getInstance()
, поскольку значение установлено на new Path()
, мне кажется очевидным, что синглтон всегда находится в состоянии по умолчанию, но во многих онлайн-источниках (как и в предыдущих двух представленных) это способ сделать это.
Что я делаю не так? Спасибо.
Вот мой синглтон (Path.ts):
class Path{
private static _instance: Path = new Path();
private _nodes: NodeModel[];
private _links: LinkModel[];
public static getInstance(): Path{
if(Path._instance)
return Path._instance;
else
throw new Error("Path is not initialized.");
}
public setPath(nodes: NodeModel[], links: LinkModel[]){
this._nodes = nodes;
this._links = links;
}
public nodes(){ return this._nodes; }
[...]
}
export = Path;
PathDefinition.ts
module PathDefinition{
export function defaultDefinition(){
var nodes = [
new NodeModel(...),
new NodeModel(...)
];
var links = [
new LinkModel(...),
new LinkModel(...)
];
Path.getInstance().setPath(nodes, links);
}
}
export = PathDefinition;
controller.ts
module Controller{
export function init(){
console.log(Airflow.getInstance().nodes());
//console.log => undefined
}
}
EDIT
Как разработчик C #, я думал, что завершение каждого содержимого файла в «модуль» (или пространство имен, как упомянуто Paleo) было лучшим способом упорядочить мой код. После прочтения предоставленных Paleo ссылок и особенно этого: Как использовать пространства имен с внешними модулями TypeScript? , я понимаю, почему мой приведенный выше код не лучший способ сделать с Typescript.