在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中有没有一种方法可以在不需要在两者之间进行手动属性映射的情况下实现这一点呢?
发布于 2019-02-20 14:58:04
没有。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>{});希望这已经足够清楚了
https://stackoverflow.com/questions/54780439
复制相似问题