TS函数类型声明与重载

前言


🐻在TS中基本上许多东西都是可以进行类型限制的,函数也不例外,这篇文章我们就来看下函数类型与重载相关的内容,来一次性的搞定函数相关问题。

一.函数签名的几种写法


🫥最正经写法:就是我们平时定义函数的方式,只不过给函数限制了参数的类型和返回值的类型

js 复制代码
function myFun(str:string):void{
    console.log(str)
}
myFun('str')

🤗表达式写法:我们知道在JS或者TS中函数是可以作为表达式的所以我们也有相应的写法,就是在表达式对应参数和返回值进行类型的标注。

js 复制代码
const fun = function(str:string):void{
    console.log(str)
}
fun('aaa')

🤡不太正经的写法:这种写法就是使用箭头函数的方式对数据进行类型样式的标注,效果一样,但是可读性不是很好,建议使用类型别名进行抽离出来,或者使用上述两种。

js 复制代码
type myfun = (str:string)=>void

const newFun:myfun = function(str:string){
    console.log("myTest-Content")
}

newFun("444")

二.函数重载


🫥TS中的函数重载,本质上是函数签名的重置,是一种伪重载,如果你熟悉C++或者Java你会发现他们之间是有差距的,C++中的重载才是真正的重载,TypeScript 允许我们在函数重载列表中定义多个函数签名,但只允许一个函数实现,所以就有了如下看起来比较奇怪的代码

js 复制代码
function func(foo: number, bar: true): string;
function func(foo: number, bar?: false): number;
function func(foo: number, bar?: boolean): string | number {
  if (bar) {
    return String(foo);
  } else {
    return foo * 599;
  }
}

const res1 = func(599); 
const res2 = func(599, true); 
const res3 = func(599, false); 

console.log(typeof res1) // number
console.log(typeof res2) // string
console.log(typeof res3) // number

如何理解这些代码奇怪的写法?理解这个写法我们可以用CSS选择器的方式来理解aaa,bbb,ccc {xxxxx}就是以这种方式。

js 复制代码
function func(foo: number, bar: true): string;
function func(foo: number, bar?: false): number;
function func(foo: number, bar?: boolean): string | number {
  if (bar) {
    return String(foo);
  } else {
    return foo * 599;
  }
}

三.异步函数,Generator等函数的写法


🦝以下的一些函数写法与正常的函数相比,参数和的类型是一样的,比较有差距的地方在于,返回值的差距,因为这些函数的返回值是已经确定的了。

js 复制代码
async function asyncFunc(): Promise<void> {}

function* genFunc(): Iterable<void> {}

async function* asyncGenFunc(): AsyncIterable<void> {}

四.总结


🤡上述我们学习了几种函数在TS中的特殊写法,我们学习了TS的类型标注和函数重载的方式,然后罗列了一下异步函数等等的用法,这些在实际开发中使用的比较多,所以应该好好掌握一下~

相关推荐
LYFlied11 分钟前
【算法解题模板】-【回溯】----“试错式”问题解决利器
前端·数据结构·算法·leetcode·面试·职场和发展
composurext11 分钟前
录音切片上传
前端·javascript·css
程序员小寒11 分钟前
前端高频面试题:深拷贝和浅拷贝的区别?
前端·javascript·面试
狮子座的男孩16 分钟前
html+css基础:07、css2的复合选择器_伪类选择器(概念、动态伪类、结构伪类(核心)、否定伪类、UI伪类、目标伪类、语言伪类)及伪元素选择器
前端·css·经验分享·html·伪类选择器·伪元素选择器·结构伪类
zhougl99617 分钟前
Vue 中的 `render` 函数
前端·javascript·vue.js
听风吟丶19 分钟前
Spring Boot 自动配置深度解析:原理、实战与源码追踪
前端·bootstrap·html
跟着珅聪学java19 分钟前
HTML中设置<select>下拉框默认值的详细教程
开发语言·前端·javascript
IT_陈寒20 分钟前
JavaScript 性能优化:5个被低估的V8引擎技巧让你的代码提速50%
前端·人工智能·后端
想睡好26 分钟前
setup
前端·javascript·html
光影少年37 分钟前
react navite相比较传统开发有啥优势?
前端·react.js·前端框架