用小例子带你快速掌握TS中的Narroing
2023-11-29 00:50:27
Narroing简介
Narroing,中文译为类型缩小,是TypeScript中类型系统的重要组成部分,它允许我们在运行时减少变量或表达式的类型,从而提高代码的类型安全性。
在TypeScript中,Narroing通常通过以下方式实现:
- 使用条件语句进行类型缩小
- 使用类型守卫进行类型缩小
- 使用工具类型进行类型缩小
通过小例子快速掌握Narroing
为了更好地理解Narroing,我们来看一个小例子:
function getLength(param: string | number): number {
if (typeof param === "string") {
return param.length;
} else {
return param.toString().length;
}
}
在这个函数中,我们使用了一个条件语句来进行类型缩小。当param
是字符串类型时,我们返回它的长度;当param
是数字类型时,我们先将其转换为字符串,然后返回它的长度。
这个例子的关键点在于,我们使用了typeof
操作符来获取param
的类型。typeof
操作符可以返回一个变量或表达式的类型。在上面的例子中,typeof param
返回"string" | "number"
。
使用条件语句进行类型缩小是一种常见的方法。除了条件语句之外,我们还可以使用类型守卫来进行类型缩小。类型守卫是一种特殊类型的函数,它可以用来确定一个变量或表达式的类型。
function isString(param: any): param is string {
return typeof param === "string";
}
这个函数是一个类型守卫。它接收一个参数,并返回一个布尔值,表示该参数是否是字符串类型。
我们可以在代码中使用类型守卫来进行类型缩小:
function getLength(param: string | number): number {
if (isString(param)) {
return param.length;
} else {
return param.toString().length;
}
}
上面的代码与之前的代码等效。但是,使用类型守卫可以让代码更加清晰和易读。
除了条件语句和类型守卫之外,我们还可以使用工具类型来进行类型缩小。工具类型是一种特殊的类型,它可以用来操作其他类型。
type StringLength = string extends (infer R)[] ? number : never;
上面的代码定义了一个工具类型StringLength
。这个工具类型可以用来获取字符串的长度。
我们可以使用工具类型来进行类型缩小:
function getLength<T extends string>(param: T): number {
return param.length;
}
上面的代码使用工具类型StringLength
来对参数param
进行类型缩小。这意味着,只有当param
是字符串类型时,这个函数才能被调用。
总结
Narroing是TypeScript中类型系统的重要组成部分,它允许我们在运行时减少变量或表达式的类型,从而提高代码的类型安全性。我们可以通过使用条件语句、类型守卫和工具类型来实现Narroing。
掌握Narroing可以帮助我们编写出更加健壮和可靠的TypeScript代码。