javascript - Estendendo o Objeto Data em TypeScript
Estou tentando estender um objeto de dados em TypeScript, adicionando alguns novos campos. Embora eu ache que seja um padrão bastante comum em JavaScript, não consigo fazê-lo compilar, sem tornar bar opcional no trecho abaixo.
Estou me perguntando se há alguma maneira de evitar tornar bar opcional. Qualquer sugestão será bem-vinda, obrigado.
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;
}
Resposta #1
Você pode fazer isso convertendo em tempo de compilação input para ExtendedDataObject em vez de apenas atribuí-lo a 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;
}
Esse tipo de cast é oficialmente chamado de asserção de tipo e diz ao compilador para confiar em você que o objeto pode ser tratado como o tipo que você indica.
