TypeScript 学习(四)

仓库地址:github.com/YaliixxG/Ty…

函数

函数类型

JS 两种函数形式(有名和匿名)

function add(x, y) {
  return x + y
}

let myAdd = function(x, y) {
  return x + y
}
复制代码

为函数定义类型

下面为上面的函数定义类型:

function add(number: x, number: y): number {
  return x + y
}

let myAdd = function(number: x, number: y): number {
  return x + y
}
复制代码

函数类型包含两部分:参数类型和返回值类型。

书写完整类型

完整的函数类型如下:

let myAdd:(x:number,y:number) = number =>function(x:number,y:number):number{
    return x + y
}
复制代码

推断类型

其实如果你在赋值语句的一边指定了类型但是另一边没有类型的话,TypeScripts 会自动识别出类型:

let myAdd:(a:number,b:number) = number =>function(x,y){
return x + y
}
复制代码

可选参数和默认参数

  1. 在定义函数时,你的形参是多少个,你的实参就必须传多少个,否则报错
  2. 假设你定义了两个形参 x,y,但是 y 这个形参可能你使用这个函数时,这个参数暂时没有实参,则用?来定义这个形参:
function buildName(firstName: string, lastName?: string) {
  if (lastName) return firstName + " " + lastName
  else return firstName
}

let result1 = buildName("Bob") // works correctly now
let result2 = buildName("Bob", "Adams", "Sr.") // error, too many parameters
let result3 = buildName("Bob", "Adams") // ah, just right
复制代码
  1. 你也可以给形参一个默认值(即默认初始化值得参数):
function buildName(firstName: string, lastName = "Smith") {
  return firstName + " " + lastName
}

let result1 = buildName("Bob") // works correctly now, returns "Bob Smith"
let result2 = buildName("Bob", undefined) // still works, also returns "Bob Smith"
let result3 = buildName("Bob", "Adams", "Sr.") // error, too many parameters
let result4 = buildName("Bob", "Adams") // ah, just right
复制代码

一般默认值参数写在必须参数的后面,如果要写在必须参数的前面的话,则你传入形参时,默认值参数如果没有值,你就必须传一个 undefined,否则报错:

function buildName(firstName = "Will", lastName: string) {
  return firstName + " " + lastName
}

let result1 = buildName("Bob") // error, too few parameters
let result2 = buildName("Bob", "Adams", "Sr.") // error, too many parameters
let result3 = buildName("Bob", "Adams") // okay and returns "Bob Adams"
let result4 = buildName(undefined, "Adams") // okay and returns "Will Adams"
复制代码

剩余参数

function buildName(firstName: string, ...restOfName: string[]) {
  return firstName + "" + restOfName.join("")
}

let emplyeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie")
复制代码

记住: 关于this和重载的部分,后面再补上,今天有点疲惫 = =

你可能感兴趣的:(TypeScript 学习(四))