javascript - 如何使用 TypeScript 根据另一个属性将 React 组件的两个属性设置为可选?

标签 javascript reactjs typescript

我想知道是否可以根据 TypeScript 中的另一个属性将两个属性设置为可选,例如:

如果 message未定义,我希望需要 ab, 如果 messagenot undefined 我希望 ab 是可选的。

如何执行此条件?

type Props = Readonly<{
  message?: React.ReactNode
  a: React.ReactNode
  b: React.ReactNode
}>

const Component = ({ message, a, b}: Props) => <div >

最佳答案

您可以使用联合类型来实现此效果:

type Props = Readonly<{
    message?: undefined
    a: string
    b: string
} | {
    message: string
    a?: string
    b?: string
}>

const Component = ({ message, a, b}: Props) => <div />;

let c = <Component message="" /> //ok 
let c2 = <Component a="" b="" /> //ok
let c3 = <Component message="" b="" /> //ok 
let c4 = <Component /> //error as expected

关于javascript - 如何使用 TypeScript 根据另一个属性将 React 组件的两个属性设置为可选?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50600963/

相关文章:

javascript - D3.js 或 EXT js 用于数据可视化,为什么?

javascript - JavaScript中数字文字后的字符 'n'是什么意思?

typescript - 我可以使用 TypeScript 编译器编译 .js 文件而不将其重命名为 .ts 文件吗?

javascript - ts-jest 无法对导入的 ES6 模块运行测试

javascript - 我想开发一个 java 脚本代码,通过它我使用空格键暂停 setInterval 函数

javascript - SignalR JS 命令第一次不会在 websockets 上执行 (vb.net)

javascript - 更改背景组件 - REACTJS

reactjs - React-hook-form 使用 Material UI 文本字段限制长度和类型

html - 如何添加内联样式宽度:calc(100%/var) in reactjs?

使用 source maps 和 webpack 调试 typescript