首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

typeScript版仿Promise源码

作为一个前端, 还有人说不会用 Promise,真的就有点过分了. 为了跟上卷的潮流,我们今天就用typeScript 来实现一下 Promise 的实现....*写 promise 之前我们需要明确一些常识....) promise 状态一旦改变就冻结, 不再发生改变 支持链式调用 拥有 all, resolve, reject, race 四个静态方法 下面我们开始进入代码块 // 首先promise 有三个状态...(reason) } } } 以上我们就实现了一个很简单的 Promise, 这个 Promise 很弱, 只能执行同步代码, 也不支持链式调用.显然这样肯定不行的, 大家都知道, Promise...*异步处理我们大致解决方案是 首先在 then 判断 Promise 状态, 如果是 padding, 说明 promise 异步了 确定异步了,resolve肯定是迟于 then 执行了, 所以我们将

50120
您找到你想要的搜索结果了吗?
是的
没有找到

如何在 TypeScript 中使用函数

创建类型化函数 在本节中,我们将在 TypeScript 中创建函数,然后向它们添加类型信息。 在 JavaScript 中,可以通过多种方式声明函数。.... (1016) 键入的箭头函数表达式 到目前为止,本教程已经展示了如何在 TypeScript键入使用 function 关键字定义的普通函数。...Promise 泛型表示由异步函数返回的 Promise 对象,其中 T 是 promise 解析为的值的类型。... { 然后,我们指定它接受作为第一个参数的用户 ID,它必须是一个数字: async function getUserById(userId: number): Promise...函数重载的一个有趣的方面是,在大多数编辑器中,包括 VS Code 和 TypeScript Playground,只要我们键入函数名称并打开第一个括号来调用函数,就会出现一个弹出窗口,其中包含所有可用的重载

14.9K10

使用JSDoc提高代码的可读性

所以编辑器就会使用一个在 TypeScript 中经常出现用来标识任意类型的 any 关键字来描述函数的参数以及返回值。...这种盲目自信一般会在接手了其他人更烂的代码后被打破,然后再反思自己究竟做错了什么,需要去维护这样的代码。 亦或者我们来放出一个稍微复杂一些的例子: ?...而多行的写法是比较常用的,在 vscode 中可以直接在函数上方键入 /** 然后回车,编辑器会自动填充很多的内容,包括参数类型、参数描述以及函数描述的预留位置,使用TAB键即可快速切换。 ?...,而是一个Promise。...所以在vscode中,基于Promise去使用@return,有两种写法可以使用: // 函数返回 Promise 实例的情况可以这么指定类型 /** * @return {Promise<number

1.3K20

实现TypeScript运行时类型检查

uint16, uint32, uint64, int8, int16, int32 , int64 等所以在将JSON 转换为对应的编程语言的数据结构时, 需要声明JSON 与编程语言数据结构的对应关系, 然后再进行转换..., 这个过程称为encode.TypeScript 中的类型TypeScript 在设计之初便以兼容JavaScript 为原则, 所以JSON 也可以直接转换为TypeScript 中的类型.比如有以下...的类型系统由于我们的最终目标是实现于TypeScript 类型系统一一对应的类型检查, 所以我们先理一理TypeScript 类型系统的(部分)基本机制.首先是TypeScript 的primitive...类型:type Primitive = number | string | boolean;然后是类型构造器:type Numbers = number[];当然, 还有最重要的object type...为了Either[] => Either的转换逻辑更加清晰, 我们不妨声明一个type alias并对其进行简化:type F = Either;然后我们便可以将

2.3K30

深入学习下 TypeScript 中的泛型

泛型语法 在进入泛型应用之前,本教程将首先介绍 TypeScript 泛型的语法,然后通过一个示例来说明它们的一般用途。...将泛型与函数一起使用 将泛型与函数一起使用的最常见场景之一是当您有一些代码不容易为所有用例键入时。为了使该功能适用于更多情况,您可以包括泛型类型。 在此步骤中,您将运行一个恒等函数示例来说明这一点。...此泛型类型用于函数的返回类型:Promise。 注意:由于您的函数是异步的,因此,您必须返回一个 Promise 对象。...TypeScript Promise 类型本身是一种通用类型,它接受 promise 解析为的值的类型。...使用 NestedOmit 泛型,传入类型,然后列出要省略的属性的键。 请注意如何在第二个类型参数中使用点符号来标识要省略的键。然后将结果类型存储在 Result 中。

38.8K30

旧项目TypeScript改造问题与解决方案记

TypeScript相关 对象属性赋值报错 在JavaScript中,我们经常会声明一个空对象,然后再给这个属性进行赋值。...### ES2015新增的Promise使用报错 将ES2015的代码改造成为TypeScript代码时,如果你使用了ES2015的新增的Promise类型,那在编辑器还是终端编译编译时都会报错: 终端编译报错...编辑器报错:[ts] “Promise”仅表示类型,但在此处却作为值使用。 这是由于TypeScript并没有提供Promise数据类型,也没有对应的polyfill。...此方法的原理是让TypeScript编译时引用外部的Promise对象,因此在编译时不会报错。此方式优点是不会引入任何其他代码,但是缺点是一定要保证在引用此库的前提下,一定存在Promise对象。...true : false } }] } ] }, extensions: ['.ts', '.js'] } 然后,我们只需要在

4.9K10

TypeScript 演化史 — 第五章】将 asyncawait 编译到 ES3ES5 (外部帮助库)

(resolve) { setTimeout(resolve, ms) }) } delay 函数返回一个 promise,调用时可以使用 await 来等待这个 promise,如下所示:...生成的 JS 代码与 TypeScript 代码相同,除了已除去所有类型注释和空白行: function delay(ms) { return new Promise(function(resolve...注意,为了让各位的代码在 ES3 或 ES5 环境中成功运行,需要提供Promise polyfill,因为 Promise 只在 ES2015 中引入。...另外,你必须让TypeScript知道在运行时,它可以找到 Promise 函数。这在上一章TypeScript 2.0:内置类型声明 有讲过了。...咱必须检查应用程序需要哪些包,然后以某种方式使它们在包中可用。一点都不好玩了。还好,TypeScript 团队提出了一个更好的解决方案。

2.8K20

TypeScript 演化史 — 第四章】更多的字面量类型 与 内置类型声明

TypeScript 1.8 引入了字符串字面量类型,用于将变量限制为可能的字符串值的有限集。在 TypeScript 2.0 中,字面量类型不再局限于字符串。...这些在 ES5 中并没有,所以咱们需要安装一个 polyfill 来让我们的代码在旧的浏览器中运行: npm install --save es6-promise 然后可以在入口文件中导入对应的库 import..."es6-promise"; 有了这个 polyfill,现在就可以在应用程序中使用 Promise,代码也可以正常运行。...然而,TypeScript 会给你一个编译时错误: Cannot find the name 'Promise'。这是因为 Promise 的类型声明不包含在任何注入的 API 组中。 ?...咱要让 TypeScript 知道 Promise 会在运行时存在,这就是 lib 编译器选项发挥作用的地方: ?

1.2K30

TypeScript 演化史 -- 5】将 asyncawait 编译到 ES3ES5 (外部帮助库)

(resolve) { setTimeout(resolve, ms) }) } delay 函数返回一个 promise,调用时可以使用 await 来等待这个 promise,如下所示:...生成的 JS 代码与 TypeScript 代码相同,除了已除去所有类型注释和空白行: function delay(ms) { return new Promise(function(resolve...注意,为了让各位的代码在 ES3 或 ES5 环境中成功运行,需要提供Promise polyfill,因为 Promise 只在 ES2015 中引入。...另外,你必须让TypeScript知道在运行时,它可以找到 Promise 函数。这在上一章TypeScript 2.0:内置类型声明 有讲过了。...咱必须检查应用程序需要哪些包,然后以某种方式使它们在包中可用。一点都不好玩了。还好,TypeScript 团队提出了一个更好的解决方案。

2.8K40

什么是鸭子🦆类型?

为什么需要鸭子类型 在一些动态语言中,鸭子类型的常见用法就是假设给定值符合我们预期的,你可以先尝试执行一个操作,然后我们再去处理不符合预期的情况下的异常。...用法示例 recursiveResolve 鸭子类型的一个方便用法是当你的代码可能接受 Promise 或者 非Promise 时来帮我们进行更优雅的判断。...假设我们创建了一个自定义方法来递归遍历对象,解析可能嵌套在里面的任何 Promise,下面就是一个很好的用法: function isRecord(value: unknown):...然后我们就可以在 recursiveResolve 函数中使用它们了,并且开销是很小的,在整个函数中都能正确推断输入。.../blog/how-to-use-typescript-type-guards/

1.8K20
领券