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