我正在尝试通过添加一些新字段来扩展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;
}
答案 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,它告诉编译器相信您可以将该对象视为您指定的类型。