代码之家  ›  专栏  ›  技术社区  ›  Zze

类型assert uppercase interface to lower

  •  1
  • Zze  · 技术社区  · 6 年前

    C# 类/接口属性是大写的。在 ts &安培; js 事实并非如此。所以当我们从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 回复  |  直到 6 年前
        1
  •  2
  •   Nguyen Phong Thien    6 年前

    没有。 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>{});
    

    希望够清楚了

    推荐文章