我有一个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”的类型推断。
差异的主要原因是什么?有完美的解决方案吗?
答案 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
通常可以正常工作!