javascript - Typescript kräver typ baserat på värde


Jag är ny på TypeScript och jag undrade om det finns ett sätt att göra en typ obligatorisk baserat på värdet av en annan typ:

type TextInput = {
    isValid?: boolean;
    validMessage?: string;
}

Är det möjligt att göra validMessage obligatoriskt om isValid blir sant?

Svar #1

Du behöver använda diskriminerade unioner:

type Valid = {
    isValid: true;
    validMessage: string
}

type Invalid = {
    isValid: false;
}

type TextInput = Valid | Invalid


const foo = (props: TextInput) => {
    if (props.isValid) {
        props.validMessage // ok
    } else {
        props.isValid // false
        props.validMessage // error
    }
}

Lekplats

Se även relaterade dokument

Relaterade artiklar