AngularJS class 键入检查解决方案
AngularJS class type check solution
简而言之
我如何对用户定义的 class 的构造函数和函数进行类型检查,通常是在 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
)。这肯定会导致构造函数和工厂函数调用不匹配参数。所以我
我的调查
打字稿:
可能需要重写所有遗留代码=.=
Facebook 流量:
由于依赖注入可能无法正常工作。
JSDoc:
(我目前在 WebStorm 10 中工作)仍在弄清楚如何进行对象类型检查,比如检查 ContainerTypeFactory.newByModel(model)
.
中的参数
may need to rewrite all the legacy code=.=
考虑来自的转换:
.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)
好消息是您可以逐步执行此操作。当您确实进行转换时,它会开始突出显示错误...因此转换将主要 由编译器引导 。
更多
结帐why typescript and migrating from JavaScript to TypeScript.
您可以使用接口来描述您的业务模型,并使用工厂来创建您的域对象
类似于:
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;
});
简而言之
我如何对用户定义的 class 的构造函数和函数进行类型检查,通常是在 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
)。这肯定会导致构造函数和工厂函数调用不匹配参数。所以我
我的调查
打字稿:
可能需要重写所有遗留代码=.=
Facebook 流量:
由于依赖注入可能无法正常工作。
JSDoc:
(我目前在 WebStorm 10 中工作)仍在弄清楚如何进行对象类型检查,比如检查 ContainerTypeFactory.newByModel(model)
.
may need to rewrite all the legacy code=.=
考虑来自的转换:
.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)
好消息是您可以逐步执行此操作。当您确实进行转换时,它会开始突出显示错误...因此转换将主要 由编译器引导 。
更多
结帐why typescript and migrating from JavaScript to TypeScript.
您可以使用接口来描述您的业务模型,并使用工厂来创建您的域对象
类似于:
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;
});