javascript - 如何重用常见类型

标签 javascript reactjs typescript

<分区>

我有多个重用相同 Prop 的 React 组件,我想知道是否有一种简单的方法可以让我存储和重用这些类型。

例如:

之前:

import * as React from 'react';

interface AnotherButtonProps {
  disabled?: boolean;
  onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
}

interface SampleButtonProps {
  disabled?: boolean;
  onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
  title: string;
}

const AnotherButton: React.FC<AnotherButtonProps> = ({ disabled = false, onClick }) => (
  <button
    disabled={disabled}
    onClick={onClick}
    type="button"
  >
    This is another button
  </button>
);

const SampleButton: React.FC<SampleButtonProps> = ({ disabled = false, onClick, title }) => (
  <button
    disabled={disabled}
    onClick={onClick}
    type="button"
  >
    {title}
  </button>
);

之后:

import * as React from 'react';

interface Disabled {
  disabled?: boolean;
}

interface OnClick {
  onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
}

interface Title {
  title: string;
}

interface AnotherButtonProps {
  disabled?: Disabled;
  onClick: OnClick;
}

interface SampleButtonProps {
  disabled?: Disabled;
  onClick: OnClick;
  title: Title;
}

const AnotherButton: React.FC<AnotherButtonProps> = ({ disabled = false, onClick }) => (
  <button
    disabled={disabled} // get error
    onClick={onClick}
    type="button"
  >
    This is another button
  </button>
);

const SampleButton: React.FC<SampleButtonProps> = ({ disabled = false, onClick, title }) => (
  <button
    disabled={disabled}
    onClick={onClick}
    type="button"
  >
    {title}
  </button>
);

当我尝试重用这些通用接口(interface)时,出现以下错误:

TS2322: Type 'boolean | Disabled' is not an assignable type 'boolean'. Type 'Disabled' is not is not assignable to type 'boolean'.

最佳答案

你需要使用工具

例如:

interface SampleButtonProps implements Disabled, OnClick, Title {}

关于javascript - 如何重用常见类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57259450/

相关文章:

angular - 在加载未登录的组件时卡住

javascript - 我怎样才能让一个 div 滚动到它的末端,Y 轴

javascript - 如何在 Javascript 中向空数组添加项目

javascript - lodash SortBy 对象内容

javascript - reactjs - 如何设置背景颜色的内联样式?

javascript - 警报不是功能错误是控制台

javascript - 为什么我的 ASP.NET CORE React Redux 应用程序中的记录没有更新?

javascript - 在 React 中,构造函数(props)中设置的值可以被覆盖吗?如果不是,如何设置可写默认值?

javascript - 为我的第一个组件编写一个 Jest 测试

javascript - Angular4/Typescript 中的 Angular ForEach?