【问题标题】:How to pass value of boolean to Generic?如何将布尔值传递给通用?
【发布时间】:2021-10-29 12:49:26
【问题描述】:

我正在尝试将布尔值传递给 Generic 类型,它将在条件中使用。

这是通用类型

interface OptionTypeBase {
    [key: string]: any;
}

type OptionsType<OptionType extends OptionTypeBase> = ReadonlyArray<OptionType>;

export type ValueType<OptionType extends OptionTypeBase, IsMulti extends boolean> = IsMulti extends true
    ? OptionsType<OptionType>
    : OptionType | null;

在我的 React 组件中,我有一个 isMulti 属性,它是从父组件中获得的。 如何传递 isMulti 的值,以便上述泛型类型可以正确推断条件的类型?

我已经尝试过这样做,但似乎是错误的。

ValueType<IOption<T>, typeof isMulti>

【问题讨论】:

  • 什么是OptionTypeBase
  • 请看更新版本。
  • 你会影响 runtime 值的 static 输入吗?我觉得不可能
  • 那么这个条件类型到底是怎么工作的呢?实际上,它在 react-select 库中。

标签: javascript reactjs typescript generics types


【解决方案1】:

我认为你应该完全考虑不这样做,因为我很确定这会让人头疼,但你可以通过将 isMulti 本身设为通用来做到这一点。这应该有效:

const MyComponent = <T extends any, IsMulti extends boolean>(
  {option, isMulti}: {option: T, isMulti: IsMulti}
) => {
  const a: ValueType<IOption<T>, IsMulti> = ...
  return <div></div>
}

【讨论】:

  • 在这种情况下,ValueType 等于什么?它是有条件的,取决于 IsMulti 它返回 OptionsTypeOptionType |空 ?
猜你喜欢
  • 2012-10-06
  • 2015-12-22
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
相关资源
最近更新 更多