函数是 JavaScript 应用程序的基础,可以实现抽象层,模拟类,信息隐藏和模块。在 TypeScript 里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定义行为的地方。TypeScript 为 JavaScript 函数添加了额外的功能,可以更容易地使用 基本示例和 JavaScript 一样,TypeScript 也可以创建函数。 123456789// 函数声明function add(x, y) { return x + y;}// 函数表达式const myAdd = function (x, y) { return x + y;}; 函数类型定义函数类型让我们为上面那个函数添加类型: 1234567function add(x: number, y: number): number { return x + y;}const myAdd = function (x: number, y: number): number { return x + y;}; 我们可以给每个参 ...
联合类型联合类型(Union Types)表示取值可以为多种类型中的一种 TypeScript 的类型系统允许我们使用多种运算符,从现有类型中构建新类型 使用第一种组合类型的方法:联合类型(Union Type) 联合类型是由两个或者多个其他类型组成的类型 表示可以是这些类型中的任何一个值 联合类型中的每一个类型被称之为联合成员(union’s members) 需求 1: 定义一个函数得到一个数字或字符串值的字符串形式值 123function toString2(x: number | string): string { return x.toString();} 需求 2: 定义一个函数得到一个数字或字符串值的长度 12345678910function getLength(x: number | string) { // return x.length // error if (x.length) { // error return x.length; } else { return x ...
TypeScript 支持与 JavaScript 几乎相同的数据类型,此外还提供了实用的枚举类型方便我们使用。 boolean最基本的数据类型就是简单的 true/false 值,在 JavaScript 和 TypeScript 里叫做 boolean(其它语言中也一样)。 123let isDone: boolean = false;isDone = true;// isDone = 2 // error number和 JavaScript 一样,TypeScript 里的所有数字都是浮点数。 这些浮点数的类型是 number。 除了支持十进制和十六进制字面量,TypeScript 还支持 ECMAScript 2015 中引入的二进制和八进制字面量。 1234let a1: number = 10; // 十进制let a2: number = 0b1010; // 二进制let a3: number = 0o12; // 八进制let a4: number = 0xa; // 十六进制 stringJavaScript 程序的另一项基本操作是处理网页或服务器端 ...
环境Linux 服务器 + Nginx AList安装 Alist 官方网站:https://alist.nn.ci/ 一键安装仅适用于 Linux amd64/arm64 平台,详细请查阅官方文档https://alist.nn.ci/zh/guide/install/script.html 1curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s install 自定义路径安装 默认安装在 /opt/alist 中。 自定义安装路径,将安装路径作为第二个参数添加,必须是绝对路径(如果路径以 alist 结尾,则直接安装到给定路径,否则会安装在给定路径 alist 目录下),如 安装到 /root: 1curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s install /root 安装成功就会出现端口号等,一般是5244端口,另外要去放行一下端口,如果忘记密码,也可以输入命令找回 12cd /opt/alist --进入alist目录./al ...
前言本文将指导你一步步实现一个符合 Promises/A+规范的 Promise,帮助你深入理解 Promise 的工作原理和实现细节。 我们将使用一个名为HYPromise的类来实现 Promise。 通过测试 一. 整体介绍Promise 是 JavaScript 中非常重要的一个概念,它是一种用于处理异步操作的编程模型。Promise 提供了一种优雅的方式来处理异步操作的成功或失败,以及它们之间的依赖关系。这使得我们可以避免回调地狱(Callback Hell)的问题,编写更清晰、更易于理解的代码。 Promises/A+是一个对 Promise 行为的开放规范,它规定了 Promise 应该如何表现和实现。遵循这个规范的 Promise 实现可以确保它们之间的互操作性,使得我们可以在不同的库和框架中轻松地使用它们。在本文中,我们将实现一个名为HYPromise的类,它将遵循 Promises/A+规范。 二. 实现目标我们将实现以下功能和方法,使HYPromise符合 Promises/A+规范: HYPromise 构造函数及基 ...
一. 认识 Promise1.1. 异步回调处理在 ES6 出来之后,有很多关于 Promise 的讲解、文章,也有很多经典的书籍讲解 Promise,包括 JavaScript 高级程序设计、你不知道的 JavaScript。 虽然等你学会 Promise 之后,会觉得 Promise 不过如此,但是在初次接触的时候都会觉得这个东西不好理解; 而网上的很多资料对于它的切入点,我一直觉得对于新手来说特别的不友好; 看到一大堆的例子,但是依然不知道这个东西有什么作用? 那么这里我从一个实际的例子来作为切入点: 我们调用一个函数,这个函数中发送网络请求(我们可以用定时器来模拟); 如果发送网络请求成功了,那么告知调用者发送成功,并且将相关数据返回过去; 如果发送网络请求失败了,那么告知调用者发送失败,并且告知错误信息; 比如我们将网络请求封装到一个 request.js 的文件中: 12345678910// request.jsfunction requestData(url) { setTimeout(() => { if (url ...
一. Proxy/Reflect1.1. 监听对象的操作我们先来看一个需求:有一个对象,我们希望监听这个对象中的属性被设置或获取的过程 通过我们前面所学的知识,能不能做到这一点呢? 其实是可以的,我们可以通过之前的属性描述符中的存储属性描述符来做到; 123456789101112131415161718192021222324const obj = { name: "why", age: 18};Object.keys(obj).forEach(key => { let value = obj[key]; Object.defineProperty(obj, key, { set: function (newValue) { console.log(`监听到给${key}设置值`); value = newValue; }, get: function () { console.log(`监听到获 ...
一. ES7 知识点1.1. Array Includes在 ES7 之前,如果我们想判断一个数组中是否包含某个元素,需要通过 indexOf 获取结果,并且判断是否为 -1。 在 ES7 中,我们可以通过 includes 来判断一个数组中是否包含一个指定的元素,根据情况,如果包含则返回 true,否则返回 false。 语法如下: arr.includes(valueToFind[, fromIndex]) 12345678910111213const names = ["abc", "cba", "nba", "why"];if (names.indexOf("why") !== -1) { console.log("包含why");}if (names.includes("why")) { console.log("包含why");}if (names.includes(& ...
一. Symbol1.1. Symbol 的基本使用Symbol 是什么呢?Symbol 是 ES6 中新增的一个基本数据类型,翻译为符号。 那么为什么需要 Symbol 呢? 在 ES6 之前,对象的属性名都是字符串形式,那么很容易造成属性名的冲突; 比如原来有一个对象,我们希望在其中添加一个新的属性和值,但是我们在不确定它原来内部有什么内容的情况下,很容易造成冲突,从而覆盖掉它内部的某个属性; 比如我们前面在讲 apply、call、bind 实现时,我们有给其中添加一个 fn 属性,那么如果它内部原来已经有了 fn 属性了呢? 比如开发中我们使用混入,那么混入中出现了同名的属性,必然有一个会被覆盖掉; Symbol 就是为了解决上面的问题,用来生成一个独一无二的值。 Symbol 值是通过 Symbol 函数来生成的,生成后可以作为属性名; 也就是在 ES6 中,对象的属性名可以使用字符串,也可以使用 Symbol; 12const s = Symbol();console.log(s); // Symbol() Symbol 即使多次创建值,它们也是不同的 ...














