打字稿错误 - 输入“Ticket[]”| undefined' 不是数组类型

W. 是的

使用 TS 时,如何将项目附加到对象数组的状态 (React)?

这是我的代码:

export type AppState = {
    tickets?: Ticket[],
}

export type Ticket = {
    id: string,
    title: string;
}

export type ApiC = {
    getTickets: (order:string, page:number) => Promise<Ticket[]>;
}

export class App extends React.PureComponent<{}, AppState> {

    state: AppState = {
    }


   fetchNewData = async () => {
        return await api.getTickets(this.state.currentOrder, this.state.page)
   }

    handleLoadMore = () => {

       let addData:Promise<Ticket[]> = this.fetchNewData()

        if (addData) 
            this.setState({
                tickets: [...this.state.tickets, addData]
            })
    }

我不断收到此错误:

输入'票[] | undefined' 不是数组类型。

我试过:

let addData:Ticket[] = this.fetchNewData()

也是我得到的错误:

类型 'Promise<Ticket[]>' 缺少类型 'Ticket[]' 中的以下属性:length、pop、push、concat 和 28 个其他属性。输入'票[] | undefined' 不是数组类型。

我试着用各种变体来写它,但没有运气。

此行中的两个指向错误

  > 144 |               tickets: [...this.state.tickets, addData]
        |                            ^
阿吉特·沙阿

您的代码中几乎没有问题,您可以解决这些问题:

  1. 从状态中删除可选项并用空数组初始化它
export type AppState = {
  tickets: Ticket[] // remove the ?
  // ...
}

constructor(props) {
  super(props)
  this.state = {
    tickets: [],
    // ...
  }
}
  1. 假设addData是数组Ticket,你需要handleLoadMore的功能async使用awaitthis.fetchNewData得到通过它返回的数据:
handleLoadMore = async () => {
  let addData = await this.fetchNewData()

  if (addData)
    this.setState({
      tickets: [...this.state.tickets, ...addData],
    })
    // Or
    this.setState({
      tickets: this.state.tickets.concat(addData),
    })
}

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

输入'号码 | undefined' 不能分配给类型'number',打字稿错误?

打字稿错误:输入'IStory | undefined' 不可分配给类型

打字稿错误:“ undefined []”类型无法分配给“ void”类型

打字稿“不是模块”错误

打字稿部分<>类型错误

输入'字符串| string[]' 不能分配给类型 'string' - 打字稿类型错误

为什么即使输入的参数数量减少了,打字稿的高阶函数也不是错误?

打字稿错误:输入 '{ onClick: () => void; }' 不可分配给类型 'IntrinsicAttributes'

打字稿错误代码:2366,函数缺少结尾的return语句,并且返回类型不包含“ undefined”

打字稿错误:类型“ any”不是构造函数类型

节点打字稿:输入'"X" | “哦” | undefined' 不能分配给类型 '"X" | “哦”'。类型 'undefined' 不能分配给类型 '"X" | "O"'.ts(2322)

打字稿错误:会覆盖输入文件

打字稿转换错误以获取输入值

输入值类型的打字稿键

打字稿:联合类型`string | undefined` 和三元

函数返回类型的打字稿错误

打字稿未检测到类型错误

打字稿等待诺言类型转换错误

打字稿编译日期类型错误

打字稿错误 # 70006 类型引用任何

排序javascript对象数组,打字稿错误

打字稿数组分配错误

打字稿数组接受错误的类型

输入'{数据:数字;}' 不可分配给打字稿中的类型 '(obj: any) => any' 错误

打字稿(错误 TS2322):输入 '{ type: ErrorPageType; }' 不可分配到类型 'ErrorPageType.SIGNUP'

打字稿:类型'X'不提供签名'(prevState:undefined):undefined'的匹配项

打字稿类型检查有误导性,打字稿未报告此类型错误

数组中的打字稿类型

打字稿多维数组类型