使用类将JSON对象强制转换为typescript类型的变量的正确方法
Correct way to cast a JSON object into a typescript typed variable using a class?
这是我尝试做的一个更简单的例子:
export class Person{
id:Number;
name:String;
}
export class PersonForm{
// This line:
default:Person = {name: "Guy"};
// Gives the following error:
// Error:(25, 5) TS2322: Type '{ name: string; }' is not assignable to type 'Person'.
// Property 'id' is missing in type '{ name: string; }'.
// I tried <Person>{name: "Guy"} but it gives the same error.
}
只要我不使用不存在的属性,我如何让编译器忽略这个问题,或者我如何声明类,这样我就可以用这种方式进行赋值,而不是用new Person(),然后只设置我想要的属性。
注意:将一个具有所有属性的对象发送到构造函数中并不是我所期望的解决方案。使用接口也是有效的,因为我可以声明字段是可选的,我如何在类中做到这一点?
添加更多信息:
我努力实现的主要目标:
找到声明类(而不是接口)的最佳方法,这样我就可以在一行中用干净的代码初始化它,只设置我想要设置的参数。在Java中,您可以重载构造函数或使用Builder模式。
我当然可以尝试构建器模式,但如果有的话,我正在寻找一种更打字的方式。
我找到了最简单的方法,这是可能的。我想我以前也尝试过这种方式,但事实上我使用的是"数字"&"字符串"类型而不是"数字"&"字符串",可能会给我编译器的拼写错误,下面的代码对我来说很神奇:
export class Person{
constructor(
public id?: number, // make sure you use number and string types instead of Number and String types
public name?: string // make sure you make all properties optional using "?"
){}
}
export class PersonForm{
default:Person = <Person>{name: "Guy"};
}
您可以使用构造函数编写类。
export class Person {
constructor(public id: number, public name: string) {}
}
但你必须这样称呼它。
let person = new Person(null, "George");
将JSON表达式强制转换为any
。分配default
的行变为:
default: Person = <any>{ name: "Guy" };
这是补充此处发布的其他答案的另一个选项。。
如果你有一些对象初始化程序
{
name:"John"
}
如果您明确想要类Person
的实例,但希望保留对象初始化程序,同时保留类Person
创建的默认值,则可以通过将整个对象传递到类构造函数中来实现:
var instance = new Person({name:"John"});
其中
export class Person
{
id:number = 0; //or generate one
name:string = "unknown";
constructor(opts:{id?:number; name?:string}){
if(opts){
this.id = opts.id || this.id;
this.name = opts.name || this.name;
}
}
}
示例:
var people = [
new Person(),
new Person({name:"John"}),
new Person({name:"James", id:10}),
new Person({id:20})];
相关文章:
- Typescript angularjs$http获取响应类型(避免使用<any>)
- Typescript Kendo UI网格列类型错误
- Angular 2中的@Angular包缺少TypeScript类型定义
- 如何存根Typescript接口/类型定义
- JQuery确定类型,typescript 1.4和Webstorm错误突出显示
- 有没有一种方法可以在Typescript中自动检查数据类型的数据相等性
- 有没有一种方法可以在泛型(<T>)函数/类(Typescript)中获取泛型类型的名称
- Typescript:从CommonJS模块导入默认值,从打字文件导出附加类型
- 如何在typescript中描述具有动态名称的类型
- TypeScript-如何定义具有任何类型参数的函数类型
- TypeScript 构造函数类型安全
- TypeScript:类型定义(接口)的引用子类型
- 是否可以在 TypeScript 中使用构造函数作为另一个函数的参数类型
- 继承和 TypeScript 错误:X 不是构造函数类型
- TypeScript 定义:名称相同,但模块内外的类型不同
- 如何在TypeScript中从匿名对象轻松创建强类型对象
- 使用类将JSON对象强制转换为typescript类型的变量的正确方法
- TypeScript 创建某个类型的字典
- 使用Node.JS和TypeScript进行强类型数据库访问
- Breeze类型的getProperty方法不适用于Typescript