在TypeScript中扩展数据对象

时间:2016-06-27 02:04:18

标签: javascript typescript

我正在尝试通过添加一些新字段来扩展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;
}

1 个答案:

答案 0 :(得分:4)

您可以通过编译时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;
}

这种类型的强制转换正式名为type assertion,它告诉编译器相信您可以将该对象视为您指定的类型。