typescript - 从接口(interface)扩展以添加新属性会导致 "Type X is not generic"

标签 typescript

export interface IOptionsPropsExtra extends IOptionsProps<IOptionListBelowProps> { delete: any}

export const SelectedChoiceItem: (optionProps: IOptionsPropsExtra<IOptionListBelowProps>) => React.ReactElement<any> =
    (optionProps: IOptionsPropsExtra<IOptionListBelowProps>) => {
        return (
            <Label className={styles.item}>
                {optionProps.item.name}
                <IconButton iconProps={{ iconName: 'Trash' }} onClick={optionProps.delete} />
            </Label>
        );
    };

我编写了接口(interface) IOptionsPropsExtra 以便能够传递一个额外的参数,该参数称为 delete 并且是一个函数,但这样做我得到:

类型“IOptionsPropsExtra”不是通用的。

我对接口(interface)以及如何扩展它们有误解吗?我认为扩展是基本继承,它允许您继承接口(interface)的所有属性,以便您可以在其之上添加任何新属性,这实际上就是我所做的一切。为什么我收到关于它不是通用的错误?它甚至应该是泛型类型吗?显然不应该给出我正在尝试做的事情,而且不是任何通用的东西,这与我在这里尝试做的事情背道而驰?

最佳答案

需要明确的是,“通用”类型是使用另一种类型作为变量的类型。
IOptionsPropsExtra不是泛型类型,因为它可以在不提供任何其他类型的情况下完全解析。

let IOptionsPropsExtra | null = null // works fine.
IOptionsProps是泛型类型,因为它需要将另一种类型传递给它。当您说 IOptionsProps<IOptionListBelowProps> 时,您正在这样做.

所以你正在锁定你的IOptionsPropsExtra类型为 IOptionsProps 泛型参数类型为 IOptionListBelowProps .

我认为你的意图是两件事之一。
  • 你想要 IOptionsPropsExtra始终延长 IOptionsProps<IOptionListBelowProps>并且任何其他类型都不应该传递给 IOptionsProps当您使用自定义类型时。如果这是您想要的,那么您已经正确声明了该类型,您只需像使用任何其他类型一样使用它,而无需 <ParameterType>句法。
  • (optionProps: IOptionsPropsExtra) => {
    
  • 或者您想要 IOptionsPropsExtra是通用的,就像它扩展的类型一样。在这种情况下,您需要将其声明为泛型,并将泛型参数转发到它扩展的类型:
  • export interface IOptionsPropsExtra<T> extends IOptionsProps<T> {
        delete: any
    }
    

    并像这样使用它:
    (optionProps: IOptionsPropsExtra<IOptionListBelowProps>) => {
    

    关于typescript - 从接口(interface)扩展以添加新属性会导致 "Type X is not generic",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60730952/

    相关文章:

    javascript - 使用 typescript 仅将 JSON 数据而不是标题提取到字符串数组

    javascript - 我可以在功能组件中使用什么来实现与 componentDidMount 相同的行为?

    javascript - 等待一组可观察的订阅函数完成

    typescript - 检查函数参数是否是 typescript 中特定类型的枚举

    javascript - angular:调用 el.setAttribute 导致错误

    javascript - 如何在 Typescript 中模拟 Cognito 响应

    typescript - 在 TypeScript 中使用 Omit 表示泛型类型的问题

    javascript - Promise.allSettled() 响应的类型错误

    javascript - 带有来自 Typescript 的路径的 Monorepo 不起作用

    javascript - 导出的异步函数的 Typescript 调用签名错误