作为一个前端, 还有人说不会用 Promise,真的就有点过分了. 为了跟上卷的潮流,我们今天就用typeScript 来实现一下 Promise 的实现....必须是一个构造函数或是类(我们在使用时必须 new, js中 类实际即时构造函数的语法糖) promise 有三个状态 padding(等待) fulfilled(完成) reject(异常...== PADDING) return this.status = REJECT this.reason = reason } // promise 使用 then 接受两个回调函数 then...的提出就是为了解决异步回调地狱问题, 下面我们就来加入异步的处理....then 回调放到一个队列里存起来, 当 promise 状态发生变更时,再去调用 .then回调,这样我们就解决了异步回调问题 以下代码请参照① ② 循序查看 const PADDING: string
从C#到TypeScript - Promise 背景 相信之前用过JavaScript的朋友都碰到过异步回调地狱(callback hell),N多个回调的嵌套不仅让代码读起来十分困难,维护起来也很不方便...这篇先来看看Promise: Promise的特点 Promise之于TypeScript,相当于Task之于C#,只有返回Promise的函数才能使用async await。...Promise的使用 可以直接new一个Promise对象,构造函数的参数是一个有两个参数的函数。...出错时把状态变为rejected并把错误消息传给reject函数,在then里面调用reject函数就可以显示异常。...不过这样写显得不是很友好,Promise还有个catch函数专门用来处理错误异常。
async函数async函数是一个特殊的函数,它内部包含异步操作,并且返回一个Promise对象。...在async函数中,我们可以使用await关键字来等待一个Promise对象的解析,并在解析完成后继续执行下一行代码。...关键字在async函数内部,可以使用await关键字来等待一个Promise对象的解析。...await会暂停async函数的执行,直到Promise对象的状态变为已解析(resolved)并返回结果,然后将结果赋值给变量。...在等待期间,async函数会暂停执行,直到promise对象的状态变为已解析。
Promise与callback函数处理 异步 对比 1,callback函数处理异步:代码逻辑复杂,可读性差----回调地狱;不可return; 2,promise处理异步: 对比callback...,易读,可以return,不需要层层传递callback; 处理多个异步等待合并 3,async,await--ES2017 ,promise的语法糖 promise const promise =...=> { // 三种状态 // pending fulfilled rejected => 进行中 已成功 以失败 // 调用resolve使状态成功,调用reject使状态失败 }) promise.then...((res) => {}, (err ) => {}) promise.all() 与 promise.race() Promise.all([a, b ,c]).then(res=> { /.../ 全部分会成功时调用 // 只要有一个失败,就返回失败的reject,其余取消 // res是一个数组,按照顺序分别储存a, b, c的返回结果 }) Promise.race([a,
TypeScript 中的函数重载允许你为一个函数提供多个函数类型定义,以便它可以以不同的方式处理不同的参数类型或参数数量。函数重载可以提高代码的可读性和类型安全性。...在 TypeScript 中实现函数重载的步骤如下: 1. 声明重载签名:首先,你需要声明一个或多个重载签名,这些签名描述了函数可以接受的不同参数类型和返回值类型。这些签名不会包含函数体。 2....实现签名包含了函数的实际逻辑。 3. 调用函数:在调用函数时,TypeScript 编译器会根据提供的参数类型来检查哪个重载签名与之匹配,并应用相应的类型检查。...替换方案 在 TypeScript 中,由于 JavaScript 的运行时不会保留函数的重载信息,因此编译器仅在编译阶段使用函数重载。到达运行时后,所有的重载都合并为单个函数实现。...使用类型断言 类型断言可以用来告诉 TypeScript 编译器,某个参数是特定的类型。
递归函数 递归函数即在函数内调用函数本身。 举个例子: 从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!...Lambda 函数也称之为箭头函数。...箭头函数表达式的语法比函数表达式更短。...函数只有一行语句: ( [param1, parma2,…param n] )=>statement; 实例 以下实例声明了 lambda 表达式函数,函数返回两个数的和: var foo = (x:number...每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
函数概念 函数是一组一起执行一个任务的语句(可以重复利用的代码块)。函数的基本功能就是解决代码重复。...函数包含三个重要的组成 功能 : 能够做什么; 参数 : 同样的功能因参数不同逻辑或者结果不同; 返回值 : 函数执行完毕后返回什么类型的结果; 函数定义 函数就是包裹在花括号中的代码块,前面使用了关键词...function: 语法格式如下: function 函数名称(参数:类型,...)...:返回值类型{ // 函数体 } 函数返回值 使用 return 来返回函数结果。主语 : 在使用 return 语句时,函数会停止执行,并返回指定的值。...返回值的类型需要与函数定义的返回类型(return_type)一致。
# 声明式类型函数 通过如下代码我们实现了一个返回值为number类型的方法,同时我们也对返回值和参数进行了约束 ``` function funcType(name:string,age:number...对方法进行添加默认值 ``` function funcType2(name:string="张三",age:number=18):number{ return age; } ``` # 表达式类型函数...``` var funcType3=function(name:string,age:number):numbe { return age; } ``` 如上代码片段是我们之前创建的函数...funcType5=function(name:string,age:number):number{ return age; } ``` # 联合类型重载 通过如下代码我们可以实现一个联合类型函数
什么是递归函数? 递归函数就是⼀个函数在它的函数体内调⽤函数⾃⾝。执⾏递归函数将反复调⽤其⾃⾝,每调⽤⼀次就进⼊新的⼀层。 注意 : 递归函数必须有结束条件,否则将陷入死循环。
TypeScript 匿名函数 匿名函数是一个没有函数名的函数。 匿名函数在程序运行时动态声明,除了没有函数名外,其他的与标准函数一样。...我们可以将匿名函数赋值给一个变量,这种表达式就成为函数表达式。...语法格式如下: var res = function( [参数] ) { 函数体 } 示例 : var msg = function() { return "hello world"; }...console.log(msg()) 匿名函数自调用 匿名函数自调用在函数后使用 () 即可: (function(msg:string){ console.log("我自己运行了 ...
为了解决这个问题,我们可以为参数设置一个类型。...问题又来了,那如何解决呢?这时我们就可以利用 TypeScript 提供的函数重载特性。 二、函数重载 函数重载或方法重载是使用相同名称和不同参数数量或类型创建多个方法的一种能力。...要解决前面遇到的问题,方法就是为同一个函数提供多个函数类型定义来进行函数重载,编译器会根据这个列表去处理函数的调用。...在 TypeScript 中除了可以重载普通函数之外,我们还可以重载类中的成员方法。...三、构造函数重载 在 TypeScript 类中构造函数是一种特殊的函数,用于构造指定类的对象。
函数默认参数/可选参数 对于同一个函数我们在不同场景下传参,参数有时候全部需要,有时候部分需要,定义多个同名函数就会报错,那么该怎么实现这个操作呢?我们可以为函数设置默认参数和可选参数。...函数重载 什么事函数重载呢?当我们多次调用函数时传递不同参数数量或者类型,函数会做出不同处理。...1、函数签名 这里介绍个名次「函数签名」,顾名思义,函数签名主要定义了参数及参数类型,返回值及返回值类型。函数签名不同,函数会做出不同的处理,这是我对函数重载的理解。...string类型没有toFixed属性`,那么怎么用函数重载解决这个报错问题呢?...拓展JS中函数重载 JS中函数重载怎么实现呢?
函数是一组一起执行一个任务的语句。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。...函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。...可选参数和默认参数 可选参数 在 TypeScript 函数里,如果我们定义了参数,则我们必须传入这些参数,除非将这些参数设置为可选,可选参数使用问号标识 ?...匿名函数 匿名函数是一个没有函数名的函数。 匿名函数在程序运行时动态声明,除了没有函数名外,其他的与标准函数一样。 我们可以将匿名函数赋值给一个变量,这种表达式就成为函数表达式。...语法格式如下: var res = function( [arguments] ) { ... } 构造函数 TypeScript 也支持使用 JavaScript 内置的构造函数 Function()
声明式类型函数 通过如下代码我们实现了一个返回值为number类型的方法,同时我们也对返回值和参数进行了约束 function funcType(name:string,age:number):number...张三",18) 对方法进行添加默认值 function funcType2(name:string="张三",age:number=18):number{ return age; } 表达式类型函数...var funcType3=function(name:string,age:number):number { return age; } 如上代码片段是我们之前创建的函数 那么我们还可以对变量进行约束...funcType6:funcType5=function(name:string,age:number):number{ return age; } 联合类型重载 通过如下代码我们可以实现一个联合类型函数
TypeScript 函数重载 函数重载是指函数名字相同,而参数不同,返回类型可以相同也可以不同。 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。...函数重载实现步骤 1 声明函数 2 实现函数 示例 : // 声明函数 function say(content:string):void; function say(content:string, name...:string):void; // 实现函数 function say(content:string, name?...console.log(name +" : "+ content); }else{ console.log(content); } } // 调用函数
TypeScript 箭头函数 Lambda 函数也称之为箭头函数。箭头函数表达式的语法比函数表达式更短。...函数只有一行语句: ( [param1, param2,…param n] )=>statement; 示例 : const add =(a:number, b:number):number => a+...b; console.log(add(1, 2)); 箭头函数 + {} 示例 const add =(a:number, b:number):number=>{ console.log("add
泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性 举个例子,以下的 join 函数参数可以是 string 或 number ?...如果想要实现:前一个参数是什么类型,后一个参数就跟着是什么类型 这时就需要用到泛型 一、函数泛型 上述情况可用函数泛型限制两个参数的类型一致,如下: ? 也可以在使用函数时定义参数的类型 ?
(x,y){ return x+y; } 一个函数有输入和输出,要在 TypeScript 中对其进行约束,需要把输入和输出都考虑到,其中函数声明的类型定义较简单: function sum...mySum:(x:number,y:number)=>number=function (x:number,y:number):number{ return x+y; }; 注意不要混淆了 TypeScript...在 TypeScript 的类型定义中,=> 用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型。...参数默认值 在 ES6 中,我们允许给函数的参数添加默认值,TypeScript 会将添加了默认值的参数识别为可选参数: function buildName(firstName:string,lastName...注意,TypeScript 会优先从最前面的函数定义开始匹配,所以多个函数定义如果有包含关系,需要优先把精确的定义写在前面。
一.类型 函数的类型分为两部分: 参数:各个参数的类型 返回值:返回值的类型 例如: // 具名函数 function add(x: number, y: number): number { return...x + y; }// 匿名函数 let myAdd = function(x: number, y: number): number { return x + y; }; 带类型的函数声明足够表达一个函数的类型信息...那么有办法复用一个函数的类型吗? 有。...:接口,具体见接口_TypeScript笔记3 二.参数 可选参数 JavaScript里参数默认都是可选的(不传的默认undefined),而TypeScript认为每个参数都是必填的,除非显式声明可选参数...参考资料 Functions Function Overloads in TypeScript TypeScript function overloading
摘要 函数是 JavaScript 中的一等公民,在 TypeScript 中也一样。函数可以用来抽象逻辑、模拟类、隐藏实现以及实现模块。...虽然在 TypeScript 中已经有了类、命名空间以及模块,但是函数在描述如何做某件事上仍然有很重要的作用。...TypeScript 相比于 JavaScript 也添加了一些额外的功能,让函数用起来更顺手。 函数 和 JavaScript 一样,函数有两种,第一种是具名函数,第二种匿名函数。...这是因为 this 来自一个对象字面量的内部,想修复这个问题,我们可以提供一个显式的 this 参数。...回调函数中的 this 参数 当你传递给第三方库回调函数的时候仍然会有 this 的问题。