gpt4 book ai didi

typescript - 如何在 TypeScript 中进行运行时类型转换?

转载 作者:搜寻专家 更新时间:2023-10-30 22:02:19 24 4
gpt4 key购买 nike

目前我正在处理一个 TypeScript 项目,我真的很喜欢 TypeScript 带来的类型推断。然而 - 当从 HTTP 调用中获取对象时 - 我可以将它们转换为所需的类型,获取代码完成并在它们上调用函数编译时,但这些会导致错误运行时

示例:

class Person{
name: string;

public giveName() {
return this.name;
}

constructor(json: any) {
this.name = json.name;
}
}

var somejson = { 'name' : 'John' }; // Typically from AJAX call
var john = <Person>(somejson); // The cast

console.log(john.name); // 'John'
console.log(john.giveName()); // 'undefined is not a function'

虽然这可以很好地编译 - 并且 intellisense 建议我使用该函数,但它会给出一个运行时异常。对此的解决方案可能是:

var somejson = { 'name' : 'Ann' };
var ann = new Person(somejson);

console.log(ann.name); // 'Ann'
console.log(ann.giveName()); // 'Ann'

但这需要我为所有类型创建构造函数。特别是,在处理树状类型和/或来自 AJAX 调用的集合时,必须遍历所有项目并为每个项目新建一个实例。

那么我的问题:有没有更优雅的方法来做到这一点?也就是说,转换为一个类型并立即为其提供原型(prototype)函数?

最佳答案

类的原型(prototype)可以动态影响到对象:

function cast<T>(obj: any, cl: { new(...args): T }): T {
obj.__proto__ = cl.prototype;
return obj;
}

var john = cast(/* somejson */, Person);

参见 the documentation of __proto__ here .

关于typescript - 如何在 TypeScript 中进行运行时类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36847582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com