Typescript 需要基于值的类型

Ale*_*dro 3 javascript typescript

我是打字稿的新手,我想知道是否有一种方法可以根据另一种类型的值来创建所需的类型:

type TextInput = {
    isValid?: boolean;
    validMessage?: string;
}
Run Code Online (Sandbox Code Playgroud)

是否可以将validMessageifisValid变为 true ?

cap*_*ian 6

您需要使用受歧视的工会:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

操场

另请参阅相关文档