我正在尝试编写一个带有回调的函数,其参数类型取决于非回调函数的参数参数。
我尝试推断使用typeof
which 为分支中的新声明正确缩小但不缩小回调的类型。
type Argument = "Foo" | "Bar";
type CallbackArgument<T extends Argument> = T extends "Foo" ? "One" : T extends "Bar" ? "Two" : never;
function foo(arg: Argument, callback: (callbackArg: CallbackArgument<typeof arg>) => void) {
if (arg === "Foo") {
callback("Two") // Works, callbackArg hasn't narrowed.
const two: CallbackArgument<typeof arg> = "Two" // Error, narrowing seems to work.
}
}
由于typeof arg
已经明显缩小到"Foo"
我希望callbackArg
正确地缩小到"One"
分支内,就像它对新声明(如two
)所做的那样。
我正在使用 Typescript 3.5.2。