javascript - Utvide Data-objektet i TypeScript


Jeg prøver å utvide et dataobjekt i TypeScript ved å legge til noen nye felt. Selv om jeg antar at det er et ganske vanlig mønster i JavaScript, får jeg det ikke til å kompilere uten å gjøre bar valgfritt i koden som nedenfor.

Jeg lurer på om det finnes noen måte å unngå å gjøre bar valgfri på. Alle forslag vil bli godt mottatt, takk.

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;
}

Svar #1

Du kan gjøre dette ved å kompileringstid-typere input til ExtendedDataObject i stedet for bare å tilordne det til 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;
}

Denne typen kast kalles offisielt typepåstand, og den forteller kompilatoren å stole på deg at objektet kan behandles som typen du angir.

Relaterte artikler