Ilija Ivic
Ilija Ivic

Reputation: 187

If one property is passed disallow other Typescript

I have this interface:

interface ILabelProps {
    labelSize?: LabelSize;
    labelColor?: LabelColor;
    labelWeight?: LabelWeight;
    labelCase?: LabelCase;
    labelVariant?: LabelVariant;
    children: string;
}

I'd like to add another property predefinedLabelType: PredefinedLabelType; but in case predefinedLabelType is passed I'd like to disallow passing any other label property except children.

Is it possible?

Upvotes: 0

Views: 158

Answers (1)

Shahin Nazer
Shahin Nazer

Reputation: 186

This one uses 2 interfaces to make and type that satisfies your scenario

interface IPreDefinedLabelsProps {
    predefinedLabelType:string,
    labelSize?: never;
    labelColor?: never;
    children?: never;
}

interface INormalLabelsProps {
    predefinedLabelType?:never,
    labelSize?: string;
    labelColor?: string;
    children?: string;
}

type LabelProps = IPreDefinedLabelsProps | INormalLabelsProps

const label:LabelProps = {
    predefinedLabelType: 'test',
    labelSize:'asfd',
    children:'test'
}

const label2:LabelProps = {
    labelSize:'asfd',
    children:'test'
}

const label3:LabelProps = {
    labelSize:'asfd',
    children:'test'
}

Upvotes: 2

Related Questions