通过typescript类扩展JavaScript对象原型
tl;dr:我需要将编译后的Typescript原型定义应用于我定义的属于该类的对象通过typescript类扩展JavaScript对象原型,javascript,angularjs,typescript,prototype,angular-http,Javascript,Angularjs,Typescript,Prototype,Angular Http,tl;dr:我需要将编译后的Typescript原型定义应用于我定义的属于该类的对象 情况: 我需要通过typescript类中定义的一些业务逻辑来扩展JavaScript对象。 这可能看起来有点像: class Address { constructor( public Street: string, public Number: number, public Zip: number, public City: string) { } publi
情况: 我需要通过typescript类中定义的一些业务逻辑来扩展JavaScript对象。
这可能看起来有点像:
class Address
{
constructor(
public Street: string,
public Number: number,
public Zip: number,
public City: string)
{ }
public get FullAddress()
{
return this.Street + ' ' + this.Number + ', '
+ this.Zip + ' ' + this.City;
}
}
编译后的JS通过FullAddress
添加代码来扩展对象原型。如果我打电话给新地址('Somestreet',53564,'SomeCity')一切都像一个符咒
问题:当我得到一些JS对象时(在我的例子中使用angular的
$http
)
并且可能会重载地址
构造函数以接受完整的对象,从而简化样板文件
实际问题:由于我需要的对象是一种比这里描述的简单地址结构更复杂的嵌套结构,上述解决方案需要我编写大量的样板文件,我觉得必须有更好的解决方案来解决这个问题。也有同样的问题!正如你所说的,一种方法是创建一个构造函数并将所有信息输入其中——有点乏味,而且似乎是错误的。我们最终制作了一个
MapTo
函数,它可以将一个泛型对象映射到一个强类:
public static MapTo(jsonObject, nameSpace, classType) {
var instance = new classType();
for (var prop in jsonObject) {
if (!jsonObject.hasOwnProperty(prop)) {
continue;
}
if (jsonObject[prop] == null) {
instance[prop] = null;
} else if (typeof jsonObject[prop] === 'object') {
if (nameSpace[prop]) {
instance[prop] = this.MapTo(jsonObject[prop], nameSpace, nameSpace[prop]);
} else {
instance[prop] = jsonObject[prop];
}
} else {
instance[prop] = jsonObject[prop];
}
}
return instance;
}
其用法是:
var strongAddress = MapTo(answer.data[0], Models, Models.Address); //I assumed your class was in a namespace called "Models"
有同样的问题!正如你所说的,一种方法是创建一个构造函数并将所有信息输入其中——有点乏味,而且似乎是错误的。我们最终制作了一个
MapTo
函数,它可以将一个泛型对象映射到一个强类:
public static MapTo(jsonObject, nameSpace, classType) {
var instance = new classType();
for (var prop in jsonObject) {
if (!jsonObject.hasOwnProperty(prop)) {
continue;
}
if (jsonObject[prop] == null) {
instance[prop] = null;
} else if (typeof jsonObject[prop] === 'object') {
if (nameSpace[prop]) {
instance[prop] = this.MapTo(jsonObject[prop], nameSpace, nameSpace[prop]);
} else {
instance[prop] = jsonObject[prop];
}
} else {
instance[prop] = jsonObject[prop];
}
}
return instance;
}
其用法是:
var strongAddress = MapTo(answer.data[0], Models, Models.Address); //I assumed your class was in a namespace called "Models"
有趣的方法。。。感觉还是有点不稳定,但已经好多了。我的问题是:我担心它只适用于内部模块,对吗(因为我在Angular中使用类,在NodeJ中使用类,所以我只使用外部模块:|)有趣的方法。。。感觉还是有点不稳定,但已经好多了。我的问题是:我担心它只适用于内部模块,对吗(因为我在Angular和NodeJ中使用类,所以我只使用外部模块:|)