我想使用打字稿重载为正在编写的功能提供智能感知。签名仅因参数类型而异。我遇到的问题是,如果有人在第一个重载中传递了与param1匹配的东西,但没有传递与param1匹配的东西,那么它将落入泛型重载。我希望这一点不被接受,并具有智能感知功能,将其标记为错误。
我已经尝试过使用Exclude <>进行条件输入,但这种方法不起作用。
type Exclusion = "Invalid";
type ExcludeString = Exclude<string, Exclusion>;
func(param1: "Activate", param2: (value: SomeInterface) => any): void;
func(param1: ExcludeString, param2: (value: any) => any): void;
当我致电func("Activate", (value: NotSomeInterface) => console.log("Invalid"));
时,我想通过智能感知告诉用户出了错误。相反,由于掉线没有任何反应。
答案 0 :(得分:1)
您不能直接定义类型,Exclude<string, Exclusion>
实际上只会导致string
打字稿实际上没有否定类型的概念。有一个提议允许类似的内容(Here),但它还不是该语言的一部分(在撰写本文时,它是最新版本3.3)。
所有这些,如果我们谈论的函数参数不应该具有特定的值,我们可以得到类似的效果。为此,我们需要一个通用类型参数来捕获传入的字符串的实际类型。然后我们可以将参数键入为Exclude<T, Exclusion>
,这将产生预期的错误:
type Exclusion = "Invalid";
type ExcludeString = Exclude<string, Exclusion>;
function func<T extends string>(param1: Exclude<T, Exclusion>): void {
}
func("SS")
func("Invalid") // error