首页 > 解决方案 > 类型'never []上不存在属性,有什么问题?

问题描述

所有,我是 React+Typescript 主题的新手。在我的示例代码中,我得到 json 对象并将一个属性打印到控制台上。来自服务器的数据成功来了。但是通过尝试使输出我收到消息“属性'专辑'不存在类型'never []' ”,尽管所有类型都已定义。我哪里错了?我应该以某种方式初始化该州的“画廊”吗?

    import React, { Component, Props } from 'react';
import axios from 'axios';


const API = 'http://www.mydomain/testapi/';
const DEFAULT_QUERY = 'test.php';


type Image = {
  id: number,
  name: string,
  title: string,
  date: string,
  size: number
}

type Album = {
  id: number,
  name: string,
  path: string,
  images: Image[]
}


interface State {
 jsonFromServer: string,
 isLoading: boolean,
 errorMsg: string,
 buttonClicked: boolean,
 gallery:Album[]
}


class App extends React.Component {

  state = {
    isLoading: false,
    errorMsg: '',
    buttonClicked: false,
    jsonFromServer: "",
    gallery:[] 
    }

  getInfo() {

    this.setState({ isLoading: true, buttonClicked: true });
    axios.get(API + DEFAULT_QUERY)
      .then(result => this.setState({
        gallery: result.data.gallery,
        isLoading: false,
        jsonFromServer: result.data

      }))
      .catch(error => this.setState({
        errorMsg: error.message,
        isLoading: false
      }));
  }

  render() {
    .....
    if (this.state.buttonClicked) {
      this.state.galerie.length > 0 ? console.log('=>', this.state.gallery.album.id) : '';
    }

 ......
  }
}

export default App;

标签: reactjstypescript

解决方案


您定义state但没有指定它的类型。因此,Typescript 将state根据初始化推断类型。因为galerie是一个数组但没有元素,所以打字稿可以推断出的最好和最安全的类型是never[]

解决方案是注释state成员:

class App extends React.Component {

  state:State  = {
    isLoading: false,
    errorMsg: '',
    buttonClicked: false,
    jsonFromServer: "",
    gallery:[] 
  }
  //...
}

推荐阅读