对象转换后的 UpperCamelCase 约定
UpperCamelCase convention after object conversion
我有以下对象,其值作为 RxJs 订阅方法的结果返回:
result: any
{
message: null
role: Object
success: true
}
然后我将其转换为 MyResponse
在 TypeScript 中键入:
export class BaseResponse {
public Message: string = null;
public Success: boolean = null;
}
export class MyResponse extends BaseResponse {
public Role: Role = new Role();
}
..
getModel() {
this.roleService.get(this.id).subscribe(
result => {
let getResponse: MyResponse = <MyResponse>result;
console.log(getResponse.Role.ApplicationId); // <-- null reference error
},
error => { },
() => {
}
);
}
问题是在 Chrome 调试器中查看 getResponse
对象时,对象属性的首字母是小写的。不应该是大写的吗?我可以把它变成大写吗?
getResponse
{
role: Object,
message: null,
success: true
}
<>
运算符 不是 类型转换,因为 TypeScript "is not present" 在运行时不再存在。仅在编译时。它是类型断言。
所以
let getResponse: MyResponse = <MyResponse>result;
不会改变值。它只会告诉编译器它应该推断 MyResponse
类型。因此,如果来自服务器的响应具有大写属性,它们在运行时仍将是大写的。如果你想让它们小写,你需要应用一个转换函数。
您可以在此处阅读有关类型断言的更多信息:https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html
编辑:您更新了您的问题,我将在下面添加更多信息。
即使您将 MyResponse
定义为 class
,TypeScript 也不会在您的代码中使用它(当设置 getResponse
时)。 TypeScript 将使用 class 作为接口。因此,public Role: Role = new Role();
不会被执行。如果你想初始化这个 属性 你必须创建一个新实例,例如new MyResponse()
.
Shouldn't it be uppercase? Can I make it uppercase?
在 JavaScript 中,土地对象属性通常是小写的。但是在使用某些 C# 后端时,我也习惯了大写属性;) 所以这是你的决定。
我有以下对象,其值作为 RxJs 订阅方法的结果返回:
result: any
{
message: null
role: Object
success: true
}
然后我将其转换为 MyResponse
在 TypeScript 中键入:
export class BaseResponse {
public Message: string = null;
public Success: boolean = null;
}
export class MyResponse extends BaseResponse {
public Role: Role = new Role();
}
..
getModel() {
this.roleService.get(this.id).subscribe(
result => {
let getResponse: MyResponse = <MyResponse>result;
console.log(getResponse.Role.ApplicationId); // <-- null reference error
},
error => { },
() => {
}
);
}
问题是在 Chrome 调试器中查看 getResponse
对象时,对象属性的首字母是小写的。不应该是大写的吗?我可以把它变成大写吗?
getResponse
{
role: Object,
message: null,
success: true
}
<>
运算符 不是 类型转换,因为 TypeScript "is not present" 在运行时不再存在。仅在编译时。它是类型断言。
所以
let getResponse: MyResponse = <MyResponse>result;
不会改变值。它只会告诉编译器它应该推断 MyResponse
类型。因此,如果来自服务器的响应具有大写属性,它们在运行时仍将是大写的。如果你想让它们小写,你需要应用一个转换函数。
您可以在此处阅读有关类型断言的更多信息:https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html
编辑:您更新了您的问题,我将在下面添加更多信息。
即使您将 MyResponse
定义为 class
,TypeScript 也不会在您的代码中使用它(当设置 getResponse
时)。 TypeScript 将使用 class 作为接口。因此,public Role: Role = new Role();
不会被执行。如果你想初始化这个 属性 你必须创建一个新实例,例如new MyResponse()
.
Shouldn't it be uppercase? Can I make it uppercase?
在 JavaScript 中,土地对象属性通常是小写的。但是在使用某些 C# 后端时,我也习惯了大写属性;) 所以这是你的决定。