如何将对象转换为另一种类型并删除 TypeScript 中不需要的字段?

Sal*_*oga 18 typescript

假设我有以下代码:

interface A {
    a: number;
}

interface B extends A {
    b: number;
}

const b: B = {a: 1, b: 5};
const a: A = b as A;
Run Code Online (Sandbox Code Playgroud)

现在变量a有 type A,但它仍然包含b在其中。有时这是不可取的 - 我想确定,如果我有一个 type 变量A,它具有type的确切字段A。我想知道,TypeScript 是否有某种“硬转换”可以在类型之间转换时删除任何不需要的字段。

Sef*_*efe 15

TypeScript 中没有转换,因为 TypeScript 不是这样工作的。TS 是 JS 之上的类型层。当您在 TS 中分配类型时,您没有设置类型,而是注释给定的表达式属于某种类型。当 TS 代码转译为 JS 时,所有类型信息都会被剥离。

或者换句话说:类型系统是 JS,而使用 TS 你只需声明一个变量是某种类型。通常,您在设计时分配了错误的类型,并在调试过程中惊讶地发现该变量的类型与预期完全不同。

如果您想确保从对象中删除属性,则需要采用 JS 方式(并且 - 如果需要 - 使用 TS 注释结果)。检查此问答以了解如何从对象中删除属性。