在TypeScript中扩展数据对象

Extending Data Object in TypeScript

本文关键字:数据 对象 扩展 TypeScript      更新时间:2023-09-26

我试图通过添加一些新字段来扩展TypeScript中的数据对象。虽然我猜这是JavaScript中相当常见的模式,但我不能使它能够编译,如果不使bar在代码片段中作为可选的,如下所示。

我想知道是否有任何方法可以避免使bar可选。欢迎提出任何建议,谢谢。

interface BaseDataObject {
    foo: string;
}
interface ExtendedDataObject extends BaseDataObject {
    bar?: string;
}
function extendData(input : BaseDataObject) : ExtendedDataObject {
    var output : ExtendedDataObject = input;
    output.bar = input.foo + ' some suffix';
    return output;
}

您可以通过在编译时将input强制转换为ExtendedDataObject而不是将其分配给output来实现这一点:

interface ExtendedDataObject extends BaseDataObject {
    bar: string;
}
function extendData(input : BaseDataObject) : ExtendedDataObject {
    var output = input as ExtendedDataObject;
    output.bar = input.foo + ' some suffix';
    return output;
}

这种类型的强制转换的正式名称是类型断言,它告诉编译器相信您的对象可以被视为您指定的类型。