输入一个 prop 以接受一个接口或另一个接口

约瑟夫

我有一个函数可以发送请求以使用单个输入道具创建和编辑待办事项。我想输入此函数的输入以仅接受CreateTodoInputEditTodoInput

export interface ICreateTodoInput {
  todoName: string;
  todoType: TodoType;
  todoContent:string;
  todoCompletionStatus: TodoCompletionStatus;
}
export interface IEditTodoInput {
  todoId: string;
  todoName?: string;
  todoType?: TodoType;
  todoContent?: string;
  todoCompletionStatus?: TodoCompletionStatus;
}
//(the `Todo...` types are just string enums)

编辑:我试过了,ICreateTodoInput | IEditTodoInput但这是两种类型的结合,会出错Property 'todoId' does not exist on type 'ICreateTodoInput'

文档提到了条件类型,这听起来像我想要的,但不确定如何将其添加到我的反应组件中

type EitherOr<T> = T extends ICreateTodoInput
  ? ICreateTodoInput
  : IEditTodoInput;//will this work?

有问题的组件

interface ITodoMutatorProps{
todoInput?: //<-- want to type this
}

export const TodoMutator = ({
  todoInput 
}: ITodoMutatorProps): JSX.Element => {
//if todoInput is type ICreateTodoInput 
    //send create request

//if todoInput is type IEditTodoInput 
    //send edit request
}

可爱的派斯特

我不会在这里推荐条件类型。你所面对的是一个“受歧视的工会”。您有一个类型,可以是 anICreateTodoInput或 an,IEditTodoInput并且您需要知道它是哪一种,然后才能将其用于创建或编辑操作。

区分这两种类型的最简单方法是查找todoId存在于 中IEditTodoInput但不存在于 中属性ICreateTodoInputTypeScript 知道如果这个属性存在,那么你的todoInput变量就是一个IEditTodoInput.

编辑:我尝试过 ICreateTodoInput | IEditTodoInput 但这是两种类型的联合,并且会出现错误属性 'todoId' 在类型 'ICreateTodoInput' 上不存在

您不能访问联合类型的属性,除非它在联合的所有分支中声明。但是您可以 使用in运算符来缩小类型

interface ITodoMutatorProps {
    todoInput: ICreateTodoInput | IEditTodoInput;
}

export const TodoMutator = ({
    todoInput
}: ITodoMutatorProps): JSX.Element => {
    if ("todoId" in todoInput) {
        editTodo(todoInput);
    }
    else {
        createTodo(todoInput);
    }

打字稿游乐场链接

完整代码(枚举和函数的占位符为空):

enum TodoCompletionStatus { }

enum TodoType { }

function editTodo(input: IEditTodoInput) { }

function createTodo(input: ICreateTodoInput) { }

export interface ICreateTodoInput {
    todoName: string;
    todoType: TodoType;
    todoContent: string;
    todoCompletionStatus: TodoCompletionStatus;
}

export interface IEditTodoInput {
    todoId: string;
    todoName?: string;
    todoType?: TodoType;
    todoContent?: string;
    todoCompletionStatus?: TodoCompletionStatus;
}

interface ITodoMutatorProps {
    todoInput: ICreateTodoInput | IEditTodoInput;
}

export const TodoMutator = ({
    todoInput
}: ITodoMutatorProps): JSX.Element => {
    if ("todoId" in todoInput) {
        //todoInput is type IEditTodoInput 
        //send edit request
        editTodo(todoInput);
    }
    else {
        //todoInput is type ICreateTodoInput 
        //send create request
        createTodo(todoInput);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在React Typescript中是否可以将组件prop接口与另一个prop一起使用?

来自分类Dev

一个接口只能扩展一个类或另一个接口

来自分类Dev

从另一个更新组件 prop

来自分类Java

如何模拟扩展另一个接口的接口

来自分类Dev

如何在React中将一个prop作为变量传递给另一个prop?

来自分类Dev

验证一个接口满足另一个接口

来自分类Dev

在TypeScript中从另一个接口的一个接口定义嵌套值?

来自分类Java

为什么一个接口不能实现另一个接口?

来自分类Java

Java 8使用一个接口在另一个接口中实现方法

来自分类Dev

如何使一个接口方法返回另一个接口?

来自分类Dev

类设计:实现一个接口的类实现另一个接口

来自分类Dev

为什么一个接口要实现另一个接口?

来自分类Dev

一个接口的打字稿键扩展了另一个接口

来自分类Dev

使用另一个接口从一个接口实现通用方法

来自分类Dev

如何使一个接口实现另一个接口

来自分类Dev

如何从另一个接口定义一个接口

来自分类Dev

从一个接口映射到另一个接口

来自分类Dev

我可以从另一个接口动态生成一个接口吗?

来自分类Dev

为作为其父组件的另一个prop传入的组件的prop设置值

来自分类Dev

PyQt-访问另一个接口的数据?

来自分类Dev

从接口访问另一个类中的对象?

来自分类Dev

无法从另一个类调用接口方法

来自分类Dev

实现对另一个接口的依赖

来自分类Dev

指向组合接口的指针-指向实现一个接口并从另一个接口的实现扩展的类

来自分类Dev

如何让函数的返回类型成为同一接口中另一个函数的输入

来自分类Dev

打字稿基于接口从另一个对象创建一个对象

来自分类Dev

如何使一个类既实现接口又从另一个类继承

来自分类Dev

以另一个形式实现一个接口

来自分类Dev

Typescript:使用一个或另一个接口键入变量

Related 相关文章

  1. 1

    在React Typescript中是否可以将组件prop接口与另一个prop一起使用?

  2. 2

    一个接口只能扩展一个类或另一个接口

  3. 3

    从另一个更新组件 prop

  4. 4

    如何模拟扩展另一个接口的接口

  5. 5

    如何在React中将一个prop作为变量传递给另一个prop?

  6. 6

    验证一个接口满足另一个接口

  7. 7

    在TypeScript中从另一个接口的一个接口定义嵌套值?

  8. 8

    为什么一个接口不能实现另一个接口?

  9. 9

    Java 8使用一个接口在另一个接口中实现方法

  10. 10

    如何使一个接口方法返回另一个接口?

  11. 11

    类设计:实现一个接口的类实现另一个接口

  12. 12

    为什么一个接口要实现另一个接口?

  13. 13

    一个接口的打字稿键扩展了另一个接口

  14. 14

    使用另一个接口从一个接口实现通用方法

  15. 15

    如何使一个接口实现另一个接口

  16. 16

    如何从另一个接口定义一个接口

  17. 17

    从一个接口映射到另一个接口

  18. 18

    我可以从另一个接口动态生成一个接口吗?

  19. 19

    为作为其父组件的另一个prop传入的组件的prop设置值

  20. 20

    PyQt-访问另一个接口的数据?

  21. 21

    从接口访问另一个类中的对象?

  22. 22

    无法从另一个类调用接口方法

  23. 23

    实现对另一个接口的依赖

  24. 24

    指向组合接口的指针-指向实现一个接口并从另一个接口的实现扩展的类

  25. 25

    如何让函数的返回类型成为同一接口中另一个函数的输入

  26. 26

    打字稿基于接口从另一个对象创建一个对象

  27. 27

    如何使一个类既实现接口又从另一个类继承

  28. 28

    以另一个形式实现一个接口

  29. 29

    Typescript:使用一个或另一个接口键入变量

热门标签

归档