我在编写打字应用程序时遇到了处理类型的问题,我将TaskListPorps作为我的界面

export default interface TaskListProps {
  tasks: [
    {
      list_id: string;
      title: string;
      description: string;
      status: string;
      deleted: boolean;
      deleted_at: string;
      created_at: string;
      updated_at: string;
    }
  ];
}

A TaskList

import TaskListProps from '@/types/TaskListProps';

const TaskList: React.FC<TaskListProps> = ({ tasks }) => {
  return (
    <FlatList
      data={tasks}
      keyExtractor={(item) => item.list_id.toString()}
      renderItem={({ item }) => <Text>{item.title}</Text>}
    />
  );
};

export default TaskList;

在我的主应用程序组件上,当我试图从API类型脚本中分配任务列表时,类型'TaskListProps[]'不可分配.

按原样包含App.tsx个组件

import React, { useEffect, useState } from 'react';
import { View, Text } from 'react-native';
import TaskList from '@/components/TaskList';
import { getTasks } from '@/services/tasks';
import TaskListProps from '@/types/TaskListProps';

const App: React.FC = () => {
  const [tasks, setTasks] = useState<TaskListProps[]>([]);

  useEffect(() => {
    const fetchTasks = async () => {
      const tasksData = await getTasks();
      setTasks(tasksData);
    };

    fetchTasks();
  }, []);


  return (
    <View>
      <Text>Minhas Tarefas</Text>
      <TaskList tasks={tasks} />
    </View>
  );
};

export default App;

错误正好发生在第<TaskList tasks={tasks} />行.

我试图通过将其封装到数组中来解决它,但不起作用.

推荐答案

首先,您可能希望将任务对象定义为单独的类型或接口,以获得更好的可读性和可重用性.例如:

export interface Task {
  list_id: string;
  title: string;
  description: string;
  status: string;
  deleted: boolean;
  deleted_at: string;
  created_at: string;
  updated_at: string;
}

export interface TaskListProps {
  tasks: Task[];
}

然后,在您的App.tsx中,使用您所在州的任务[]类型:

const App: React.FC = () => {
  const [tasks, setTasks] = useState<Task[]>([]); // Use Task[] here

  useEffect(() => {
    const fetchTasks = async () => {
      const tasksData = await getTasks();
      setTasks(tasksData);
    };

    fetchTasks();
  }, []);

  return (
    <View>
      <Text>Minhas Tarefas</Text>
      <TaskList tasks={tasks} />
    </View>
  );
};

export default App;

这样,App.tsx中的任务状态正确地表示了任务对象的数组,并且类型将与TaskListProps接口中TaskList所期望的一致.

Typescript相关问答推荐

类型脚本:类型是通用的,只能索引以供阅读.(2862)"

如何将http上下文附加到angular中翻译模块发送的请求

typescribe不能使用值来索引对象类型,该对象类型满足具有该值的另一个类型'

从typescript中的对象数组中获取对象的值作为类型'

异步动态生成Playwright测试,显示未找到测试

根据另一个属性的值来推断属性的类型

隐式键入脚本键映射使用

嵌套对象的类型

CDK从可选的Lambda角色属性承担角色/复合主体中没有非空断言

接口重载方法顺序重要吗?

部分更新类型的类型相等

布局组件中的Angular 17命名路由出口

有没有办法在Zod中使用跨字段验证来判断其他字段,然后呈现条件

如何使这种一对一关系在旧表上起作用?

类型与泛型抽象类中的类型不可比较

为什么发送空字段?

从类型脚本中元组的尾部获取第n个类型

棱角分明-什么是...接口类型<;T>;扩展函数{new(...args:any[]):t;}...卑鄙?

如何为特定参数定义子路由?

如何根据Typescript 中带有泛型的对象嵌套键数组获取数组或对象的正确类型?