请教一个 TS 泛型推导中,调用的实例不提供类型得不到结果的问题?

演示链接:https://codesandbox.io/p/sandbox/ji-ben-shi-yong-antd-5-25-2-...

需要将参数 query: CurrentType 中的类型 CurrentType 去掉

目前的方式

  <SelectLazyLoad
    fetch={(query: CurrentType) => {
      return Promise.resolve({ records: [1, 2, 3, 4] });
    }}
    filter={(result) => {
      return {
        value:
          result?.records.map((item) => ({ value: item, label: item })) || [],
      };
    }}
    style={{ width: 300 }}
  />

现在去掉参数的类型,推导的结果就不正确了,请问怎么做

阅读 363
2 个回答

我好像找到解决办法了,这样做:

interface SelectProps<T> {
  fetch?: (num: number) => Promise<T>;
  filter?: <R extends T>(value: R) => { value: { label: string, value: string }[] };
}

但是存在一个问题,如下代码:

        fetch={query => {
          return Promise.resolve([1,2 , 3, 4, 5])
        }}
        filter={result => {
          return {
            value: result.map(item => ({ label: item, value: item }))
          }
        }}

这时候 filter 的参数 result 就变成 unknow,但如果我不把 result 返回的话,像这样

        filter={result => {
          return {
            value: []
          }
        }}

这样 result 的类型是对的,请问怎么解决呢?

typescript 升级到 5.1.6 以上,具体可以在 playground 切换版本看下效果

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进