对于函数主要关心的是:函数的入参类型函数的返回值类型

函数的两种声明方式

  1. 通过 function 关键字来进行声明,不涉及到变量类型的标注
function sum(a: string, b: string): string {
// 限制函数的参数和返回值类型
return a + b;
}
sum("a", "b");
  1. 通过表达式方式声明,可以给变量重新赋值,如果给变量写好了一个类型,就意味着赋予的值要满足这个类型.
type Sum = (a1: string, b1: string) => string;
let sum: Sum = (a: string, b: string) => {
return a + b;
};

可选参数

?表示可选参数,可传可不传,必须在其他参数的最后面

let sum = (a: string, b?: string): string => {
return a + b;
};
sum("a");

默认参数

默认参数表示函数参数的默认值,必须在其他参数的最后面

type Sum = (x: string, y?: string) => string;
let sum: Sum = function (a, b = "123") {
return a + b;
};
sum("a");

剩余参数

let sum = function (a?: string, ...args: string[]) {
return args.reduce((memo, current) => memo + current, a);
};
let r = sum("a", "b", "c", "d");
console.log(r);

函数的重载

js 不支持函数的重载, ts 也就不支持,所以 ts 中的函数重载(伪重载, 对参数进行区分),

而 js 是通过 arguments 来实现重载,比如$('app').html()$('app').html('hello world') 实现获取和设置功能

function toArray(value: number): number[];
function toArray(value: string): string[];
function toArray(value: string | number): string[] | number[] {
// 只有一个具体的实现,并不是真正意义上的重载
if (typeof value === "string") {
return value.split("");
} else {
return value.toString().split("").map(Number);
}
}
let arr1 = toArray(1);
let arr2 = toArray("2");

this 的类型

在 TS 中存在两个关键字:

  • typeof:取变量的类型,返回的是类型
  • keyof:取的是类型的 key 的集合
// this 导致的问题是不方便类型推导,用起来比较麻烦
function getName(this: Person, key: PersonKey) {
return this[key];
}
const person = { name: "yya", age: 18 }; type Person = typeof person; // type Person = {name: string; age: number;}
type PersonKey = keyof Person; // type PersonKey = "name" | "age"
getName.call(person, "name");
getName.call(person, "a"); // 报错:类型“"a"”的参数不能赋给类型“"name" | "age"”的参数。

最新文章

  1. 【Swift】UITableViewCell 中 TTTAttributedLabel 超链接无法点击的问题
  2. JAVA Day9
  3. IOS第九天(3:QQ聊天界面通知的使用)
  4. 将j-ui(dwz)套用到thinkphp注意事项
  5. eclipse jdk配置
  6. Oracle删除用户和表空间
  7. IAR Build from the command line 环境变量设置
  8. LVS+Keepalived实现高可用集群
  9. 线程间通信的三种方式(NSThread,GCD,NSOperation)
  10. SQL Server 数据的创建、增长、收缩
  11. js onmouseover与onmouseout用法
  12. jackson json转对象 对象转json
  13. cJSON库的简单介绍及使用
  14. react-router、react-router-dom、react-router-native 关系
  15. WinForm POST上传与后台接收
  16. JSP与Servlet之间传值的一般方法,适合新手做练习
  17. [转]OkHttp3 最有营养的初级教程
  18. 【vue基础学习】vue.js开发环境搭建
  19. Scrapy框架--cookie的获取/传递/本地保存
  20. 20155314 2016-2017-2《Java程序设计》课程总结

热门文章

  1. js高级基础部分
  2. Node.js 的学习(四)分别连接MongoDB与MySQL数据库,实现增删查改功能
  3. Dockerfile 使用 SSH docker build
  4. 2022春每日一题:Day 33
  5. 篇(18)-Asp.Net Core入门实战-文章管理之文章内容管理(下拉框二级结构递归)
  6. EluxJS-让你像切蛋糕一样拆解前端巨石应用
  7. 重新认识下JVM级别的本地缓存框架Guava Cache(3)——探寻实现细节与核心机制
  8. python什么是异常?如何处理异常
  9. 实时采集MySQL数据之轻量工具Maxwell实操
  10. get请求拼接数组转字符串