interface TspComponentListViewProps {
  className?: string;
  /**
   * 滚动容器的ID，没有就是body
   */
  scrollContainerId?: string; 
  /**
   * 延迟的加载时间
   */
  delay?: number;
  /**
   * 网络请求函数，不包含成功和失败的回调
   */
  request?: (params: object) => void;
  /**
   * 接口参数
   */
  params: TspComponentAjaxPostOption;
  /**
   * 数据源字段
   */
  dataKey?: string[];
  /**
   * 页数字段
   */
  pageKey?: string;
  /**
   * 页数开始值
   */
  pageStart?: number;
  /**
   * 每页条数字段
   */
  pageSizeKey?: string;
  /**
   * 数据渲染函数
   */
  rowRender: (data: any, index: number, dataSoucre:  any) => JSX.Element;
  /**
   * 首次加载空视图
   */
  emptyView: any;
  /**
   * 首次加载失败的视图
   */
  failView: any;
  /**
   * 超时的视图
   */
  timeoutView: any;
  /**
   * 加载中的视图
   */
  loadingView: any;
  /**
   * 加载请求成功并且有数据的额外视图，用于renderRow之外的展示的
   */
  successBeforeView?: (data: any) => any;
  /**
   * 加载请求成功的额外视图，用于renderRow之外的展示的
   */
  completeBeforeView?: (data: any) => any;
  /**
   * 加载成功的额外视图，用于renderRow之外的展示的
   */
  successAfterView?: (data: any) => any;
  /**
   * 重载ID
   */
  reloadId?: any;
  /**
   * 刷新ID
   */
  refreshId?: any;
  /**
   * 过滤
   */
  filter?: (data: any) => boolean;
}

interface TspComponentListViewState {
  /**
   * 储存即将渲染的元素
   */
  render: any;
}

/**
 * complete: 完成
 * loading: 加载中
 * fail: 加载失败
 * empty: 没有数据
 * timeout: 加载超时
 * over: 加载完毕
 */
type TspComponentListViewStatus = 'complete' | 'loading' | 'fail' | 'empty' | 'timeout' | 'over';