如何解决打字稿中有关泛型的困惑点?

时间:2020-08-10 09:24:03

标签: reactjs typescript generics types

我有一个ts函数,使用Generic编写。

function task<T>(builder: (props: { propsA: number }, option: T) => void) {
  return {
    run: (option: T) => {},
  }
}

当我使用该函数时,有关泛型的类型不起作用。

task((props, { name = 'default name' }) => {
  /**
   * At here, We can infer the type of props: { propsA: number; }
   */
}).run('wrong option'/** But here, no type tips about param of the function call */)

如评论中所述,ts通用不能推断T的类型,它应该是{name ?: string}

但是当我使用单独的参数时,它可以解决

const builder = (props, { message = 'your message' }) => {
  /**
   * At here, We CANNOT infer the type of props
   */
}
task(builder).run({ message: 'correct type' } /** Correct type tips */)

在这种形式下,我们可以引用正确的Generic类型,但是会丢失“ props”的类型推断。

差异的主要原因是什么?有完美的解决方案吗?

1 个答案:

答案 0 :(得分:0)

根据我在TS中的经验,我认为您无法在T处于子级时推断T。 在您的例子中,T始终是不确定的。但是,如果您使用:

@echo off & setlocal enabledelayedexpansion
set "_1=On" & set "_2=Off"
echo cd regestries
choice /c ed /m "Do you want to enable or disable dark mode?"
call DarkMode!_%errorlevel%!.bat

通常可以正常工作!