如何对AngularJS的依赖注入环境中的用户定义类的构造函数和函数进行类型检查?
我有一个带有大量数据对象的遗留angularjs代码。代码文件中填充了许多(约50个)简单的angularjs工厂,如:
.factory('ContainerTypeModel', function () {
var ContainerTypeModel = function (name, constantCode) {
this.name = name || "";
this.constantCode = constantCode || "";
};
return ContainerTypeModel;
})
.factory('ContainerTypeFactory', ['ContainerTypeModel', function (ContainerTypeModel) {
var ContainerTypeFactory = {
newByModel: function (/** ContainerTypeModel */model) {
return new ContainerTypeModel(
model.name,
model.constantCode
);
}
};
return ContainerTypeFactory;
}])
可悲的是,由于商业原因,我可能需要更改模型的属性(如ContainerTypeModel
)。这肯定会导致构造函数和工厂函数调用参数不匹配。所以我
可能需要重写所有遗留代码=。=
可能无法正常工作。
(我目前在WebStorm 10工作)仍然在弄清楚如何进行对象类型检查,比如检查ContainerTypeFactory.newByModel(model)
中的参数。
答案 0 :(得分:3)
可能需要重写所有遗留代码=。=
考虑转换自:
.factory('ContainerTypeModel', function () {
var ContainerTypeModel = function (name, constantCode) {
this.name = name || "";
this.constantCode = constantCode || "";
};
return ContainerTypeModel;
})
到:
class ContainerTypeModel {
name: string;
constantCode: string;
constructor (name, constantCode) {
this.name = name || "";
this.constantCode = constantCode || "";
};
}
// later
.service('ContainerTypeModel', ContainerTypeModel)
好消息是你可以逐步。当你确实进行转变时,它将开始突出显示错误......所以转换将主要由编译器引导。
答案 1 :(得分:1)
您可以使用界面来描述您的商业模式,并使用工厂来创建您的域对象
类似的东西:
interface IContainerTypeModel {
name : string;
constantCode: string;
}
interface IContainerTypeFactory {
(name:string, constantCode:string) : IContainerTypeModel;
}
angular.factory('ContainerTypeFactory', function():IContainerTypeFactory {
var containerTypeFactory : IContainerTypeFactory = function (name, constantCode) {
return {
name : name,
constantCode : constantCode
}
};
return containerTypeFactory;
});