Javascript 如何在流中静态地键入回退行为

Javascript 如何在流中静态地键入回退行为,javascript,reactjs,flowtype,Javascript,Reactjs,Flowtype,我正在努力如何正确地在流中输入一个组件的默认行为,而不需要代码重复。 期望的行为如下所示: 如果提供了正确的值,则所有值必须为同一类型,并将使用 如果未提供任何所需的值,请回退以覆盖所有值并使用某些默认值 因此,强制所有类型必须对齐(如果提供)是很重要的,但它们必须都是可选的 例如,tabs react组件可以获取选项卡定义列表。如果提供了具有value属性的选项卡列表,则使用该值确定活动选项卡,并且初始选项卡属性必须为同一类型。如果选项卡不包含该值,则回退到索引处理,并且初始值必须为num

我正在努力如何正确地在流中输入一个组件的默认行为,而不需要代码重复。 期望的行为如下所示:

  • 如果提供了正确的值,则所有值必须为同一类型,并将使用
  • 如果未提供任何所需的值,请回退以覆盖所有值并使用某些默认值
因此,强制所有类型必须对齐(如果提供)是很重要的,但它们必须都是可选的

例如,tabs react组件可以获取选项卡定义列表。如果提供了具有value属性的选项卡列表,则使用该值确定活动选项卡,并且初始选项卡属性必须为同一类型。如果选项卡不包含该值,则回退到索引处理,并且初始值必须为number类型

以下是我尝试过的:

type Full<T> = {
  children: (T) => Node,
  initialTab: T,
  tabs: { label: string, value: T }[],
}

type Default = {
  children: (number) => Node,
  initialTab: number,
  tabs: { label: string }[],
}

type Props<T> = Full<T> | Default

function Tabs<T>({ className, children, tabs, initialTab }: Props<T>) {
  const [activeTab, setActiveTab] = useState(initialTab)
  return children(activeTab)
  )
}
type Full={
子节点:(T)=>节点,
首字母表:T,
制表符:{label:string,value:T}[],
}
类型默认值={
子节点:(编号)=>节点,
initialTab:number,
制表符:{label:string}[],
}
类型道具=完整|默认值
函数选项卡({className,children,Tabs,initialTab}:Props){
const[activeTab,setActiveTab]=useState(initialTab)
返回子项(activeTab)
)
}

我尝试了所有我能想到的变化,但我仍然得到错误。例如,在上面的示例中,默认数字类型与变量T类型不一致,因此我无法使用它调用子级。

您可以为泛型类型参数提供默认类型。我发现我的问题简化得太多了。是的,这将默认T为数字,但是如果我想使用一些默认逻辑,在函数内部,flow知道它是一个数字,它会告诉我数字与T不兼容。我想我会更新我的问题来澄清这一点。你可以只为泛型类型参数提供默认类型。我发现我的问题简化得太多了。是的,这将默认T为数字,但是如果我想使用一些默认逻辑,在函数内部,flow知道它是一个数字,它会告诉我数字与T不兼容。我想我会更新我的问题来澄清这一点。