gpt4 book ai didi

typescript - 根据 TypeScript 中的另一个属性值动态解析属性类型

转载 作者:搜寻专家 更新时间:2023-10-30 20:33:06 27 4
gpt4 key购买 nike

我有以下 TypeScript 接口(interface):

interface SelectProps {
options: Option[];
value: string[];
onChange: (value: string[]) => void;
}

我想添加名为 isMultiple 的 bool 值,它将更改其他属性的类型。

isMultiple=true

  • 执行 value:string[]
  • 强制 onChange: (value: string[]) => void;

isMultiple=false

  • 执行 value:string
  • 强制 onChange: (value: string) => void;

是否可以根据一个属性的值动态设置其他属性的类型?

最佳答案

有点晚了,但我希望它能像帮助我一样帮助其他人。

区分联合,也称为标记联合或代数数据类型可用于解决此问题。

interface MultipleSelectProps {
isMultiple: true;
options: string[];
value: string[];
onChange: (value: string[]) => void;
}

interface SingleSelectProps {
isMultiple: false;
options: string[];
value: string;
onChange: (value: string) => void;
}

type SelectProps = MultipleSelectProps | SingleSelectProps;

使用示例:

function Select(props: SelectProps) {
if (props.isMultiple) {
const { value, onChange } = props;
onChange(value);
} else if (props.isMultiple === false) {
const { value, onChange } = props;
onChange(value);
}
}

Note: When isMultiple is undefined or null it is not possible to infer the specific type of SelectProps. In these cases is necessary to do a strict comparison isMultiple === false.

来源:https://blog.mariusschulz.com/2016/11/03/typescript-2-0-tagged-union-types

关于typescript - 根据 TypeScript 中的另一个属性值动态解析属性类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41705559/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com