对象转换后的UpperCamelCase约定

时间:2017-03-17 07:41:29

标签: angular typescript typescript2.1

我有以下对象,其结果是从RxJs订阅方法返回的值:

result: any
{
    message: null
    role: Object
    success: true
}

我在TypeScript中将其转换为MyResponse类型:

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
}

1 个答案:

答案 0 :(得分:0)

<>运算符类型转换,因为TypeScript&#34;不存在&#34;在运行时不再。仅在编译时。它是类型断言

所以

let getResponse: MyResponse = <MyResponse>result;

更改值。它只会告诉编译器它应该推断出MyResponse类型。因此,如果来自服务器的响应具有大写属性,则它们仍将在运行时大写。如果您希望它们是小写的,则需要应用转换函数。

您可以在此处详细了解类型断言:https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html

编辑:您更新了问题,我将在下面添加更多信息。

即使您将MyResponse定义为class,TypeScript也不会在您的代码中使用它(设置getResponse时)。 TypeScript将使用该类作为接口。因此,public Role: Role = new Role();不会被执行。如果要初始化此属性,则必须创建一个新实例,例如new MyResponse()

  

它不应该是大写的吗?我可以把它做成大写吗?

在JavaScript中,土地对象属性通常是小写的。但是使用一些C#后端我也习惯了大写属性;)所以这是你的决定。