输入assert大写接口到lower

时间:2019-02-20 06:50:52

标签: typescript

C#中,类/接口属性的惯例是大写的。在tsjs中不是这种情况。因此,当我们从ajax调用中获取数据时,它通常是大写的。

所以我有类似以下内容的内容,我想在两者之间输入assert:

interface CSharp {
    B: string;
    A: string;
}

interface TS {
    a: string;
    b: string;
}

let cs: CSharp = { A: 'hello', B: 'bob' };
let ts: TS = cs as TS;

这失败了,但是ts中是否有一种方法可以实现这一目标而不必在两者之间进行手动属性映射?

1 个答案:

答案 0 :(得分:2)

没有。 as TS是类型断言,而不是类型转换。这意味着您让编译器知道它是TS类型,而不是要求编译器将其转换为TS类型,这也是不可能的。

基本上,TypeScript可以帮助您验证代码,而不是转换代码。您期望的是JS功能,它可以转换数据而不是类型。

如果您不想更改服务器上的配置,则可以使用此代码

interface CSharp {
    B: string;
    A: string;
}

interface TS {
    a: string;
    b: string;
}

let cs: CSharp = { A: 'hello', B: 'bob' };
let ts: TS = Object.keys(cs).reduce((sum, key) => {
    sum[key.toLowerCase() as keyof TS] = cs[key as keyof CSharp];
    return sum;
}, <TS>{});

希望很清楚