【问题标题】:UpperCamelCase convention after object conversion对象转换后的 UpperCamelCase 约定
【发布时间】:2017-08-08 16:15:24
【问题描述】:

我有以下对象,其值作为 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
}

【问题讨论】:

    标签: angular typescript typescript2.1


    【解决方案1】:

    &lt;&gt; 运算符不是类型转换,因为 TypeScript 在运行时“不再存在”。仅在编译时。它是类型断言

    所以

    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# 后端,我也习惯了大写属性;)所以这是你的决定。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    相关资源
    最近更新 更多