TypeScript 声明合并
TypeScript 中的声明合并是指将具有相同名称的多个声明合并为单一声明。这通常用于结合多个源中的声明,以便在类型系统中形成一个统一的视图。以下是一个简单的示例:// 示例1: 合并接口interface Car { brand: string; speed: number;}interface Car { color: string;}const myCar: Car = { brand: "Toyota", speed: 120, color: "blue"};在这个示例中,TypeScript 会将两个 Car 接口合并为一个,使得最终的 myCar 对象包含了两个接口中的所有属性。另一个常见的用例是合并函数声明:// 示例2: 合并函数声明function greet(name: string): string;function greet(age: number): string;// 实际的函数实现function greet(parameter: string | number): string { if (typ...
TypeScript 模块解析
在 TypeScript 中,模块解析是指在编译时确定模块导入语句中模块的位置的过程。TypeScript 提供了多种模块解析策略,开发者可以根据项目的需要选择适合的策略。以下是 TypeScript 中常见的模块解析策略:相对路径和非相对路径:1. 相对路径: 相对路径是相对于当前文件的路径,以 ./ 或 ../ 开头。 // 相对路径导入 import { something } from './path/to/module';2. 非相对路径: 非相对路径是不以 ./ 或 ../ 开头的路径,例如 Node.js 模块的解析方式。 // 非相对路径导入 import { something } from 'module';模块解析策略:TypeScript 提供了不同的模块解析策略,可以在 tsconfig.json 文件中配置。以下是一些常见的模块解析策略:1. 经典模块解析(Classic Module Resolution): 默认使用的是经典模块解析,适用于 Node.js 项目。在 tsconfig.json ...
TypeScript 命名空间和模块
在 TypeScript 中,命名空间(Namespace)和模块(Module)是两种组织和封装代码的不同方式。它们有一些共同点,但也有一些重要的区别。命名空间(Namespace):1. 定义方式: 使用 namespace 关键字定义命名空间。 // mathOperations.ts namespace MathOperations { export function add(a: number, b: number): number { return a + b; } export function subtract(a: number, b: number): number { return a - b; } }2. 引用方式: 在其他文件中,可以使用 /// <reference path="path/to/file.ts" /> 指令引用命名空间所在的文件。 /// <reference path="mathOp...
TypeScript 命名空间
在 TypeScript 中,命名空间是一种将代码组织成模块的方式。命名空间提供了一种避免全局命名冲突的机制,允许你将相关的代码组织在一起。以下是 TypeScript 中命名空间的基本概念和用法:定义命名空间:使用 namespace 关键字可以定义一个命名空间。在命名空间中可以包含变量、函数、类等。// mathOperations.tsnamespace MathOperations { export function add(a: number, b: number): number { return a + b; } export function subtract(a: number, b: number): number { return a - b; }}引用命名空间:在其他文件中,可以使用 /// <reference path="path/to/file.ts" /> 指令引用命名空间所在的文件。/// <reference path="mathOperations....
TypeScript 模块
在 TypeScript 中,模块是一种用于组织和封装代码的机制。模块帮助开发者将代码拆分成可重用的单元,并提供了命名空间、依赖管理和代码组织的工具。以下是 TypeScript 中模块的基本概念和用法:导出和导入:1. 导出变量、函数和类: 使用 export 关键字可以将变量、函数和类导出,使其在其他模块中可用。 // utils.ts export const PI = 3.14; export function add(a: number, b: number): number { return a + b; } export class Calculator { multiply(a: number, b: number): number { return a * b; } }2. 导入变量、函数和类: 使用 import 关键字可以在其他模块中导入变量、函数和类。 // app.ts import { PI, add, Calculator } from './utils...
TypeScript 迭代器和生成器
在 TypeScript 中,迭代器和生成器是用于处理集合和序列的重要工具。它们提供了一种更简洁和可控制的方式来遍历数据结构。以下是 TypeScript 中迭代器和生成器的基本概念和用法:迭代器(Iterators):1. 迭代器协议: 迭代器协议定义了一个对象必须具备的 next 方法,该方法返回一个包含 value 和 done 属性的对象。 interface Iterator<T> { next(): { value: T; done: boolean }; }2. 可迭代对象: 实现了迭代器协议的对象被称为可迭代对象,它们具有一个 Symbol.iterator 方法,返回迭代器对象。 interface Iterable<T> { [Symbol.iterator](): Iterator<T>; }3. 使用 for...of 遍历: for...of 循环可以遍历实现了迭代器协议的可迭代对象。 let numbers = [1, 2, 3]; for (let num of...
TypeScript Symbols
在 TypeScript 中,Symbol 是一种原始数据类型,引入自 ECMAScript 6(ES6)。Symbol 是一种不可改变且唯一的数据类型,通常用于定义对象的私有属性或创建唯一的标识符。以下是关于 TypeScript 中 Symbols 的一些基本概念和用法:1. Symbol 的创建: 使用 Symbol 函数可以创建一个新的 Symbol。 const mySymbol: symbol = Symbol("mySymbol"); 这里的 "mySymbol" 是一个可选的描述,它并不影响 Symbol 的唯一性,仅用于调试和标识。2. Symbol 的唯一性: 每个通过 Symbol 创建的 Symbol 都是唯一的,即使它们有相同的描述。 const symbol1 = Symbol("same"); const symbol2 = Symbol("same"); console.log(symbol1 === symbol2); // false3. Sy...
TypeScript 高级类型
TypeScript 提供了一些高级类型特性,这些特性使得在类型系统中可以更灵活地表示和操作类型。以下是一些 TypeScript 中常见的高级类型:1. 交叉类型(Intersection Types): 交叉类型表示一个值可以同时具有多种类型。使用 & 运算符连接多个类型。 type Point = { x: number; y: number }; type Color = { color: string }; type ColoredPoint = Point & Color; let coloredPoint: ColoredPoint = { x: 1, y: 2, color: "red" };2. 联合类型(Union Types): 联合类型表示一个值可以是多个类型中的一种。使用 | 运算符连接多个类型。 type Result = number | string; let result1: Result = 42; let result2: Result = "success"...
TypeScript 类型兼容性
在 TypeScript 中,类型兼容性是指当一个类型被视为另一个类型的子类型时,它们之间的关系。TypeScript 中的类型兼容性是基于结构化类型系统的,这意味着类型的关系不仅仅依赖于它们的声明形式,还取决于它们的结构。以下是一些关于 TypeScript 类型兼容性的基本概念:1. 基本类型兼容性: TypeScript 中的基本类型是根据其结构进行比较的,而不是依赖于它们的名称。 let x: number = 1; let y: number | string = 1; x = y; // 兼容,因为 number 可以赋值给 number | string // y = x; // 不兼容,因为 number | string 不能赋值给 number2. 接口兼容性: 当一个类型具有至少与另一个类型相同的属性时,它们被认为是兼容的。 interface Point { x: number; y: number; } let point: Point = { x: 1, y: 2 }; let point2: ...
TypeScript 类型推论
TypeScript 的类型推论(Type Inference)是一种自动推导变量和表达式的类型的机制。当你声明一个变量并赋予它一个初始值,TypeScript 会根据这个初始值的类型来推断该变量的类型。以下是一些关于类型推论的基本概念:1. 基础类型推论: 当你声明一个变量并赋予它一个初始值,TypeScript 会根据该初始值的类型推断出变量的类型。 let x = 10; // 类型推断为 number let y = "hello"; // 类型推断为 string2. 最佳通用类型: 当一个变量被赋予多个类型的值时,TypeScript 会推断出一个最适合的通用类型。 let values = [1, "two", true]; // 类型推断为 (string | number | boolean)[]3. 上下文类型推论: 当一个表达式的类型与所期望的类型一致时,TypeScript 会使用所期望的类型来推断表达式的类型。 window.onmousedown = function (mouseEvent...
TypeScript 枚举
在 TypeScript 中,枚举(Enums)是一种用于命名一组命名常量的数据类型。它提供了一种更友好的方式来使用常量值,并且可以帮助代码更清晰地表达意图。以下是 TypeScript 中枚举的基本概念和用法:1. 数字枚举: 最简单的枚举类型,每个成员都有一个关联的数字值,默认从0开始递增。 enum Direction { Up, Down, Left, Right, } let up: Direction = Direction.Up; let down: Direction = Direction.Down;2. 字符串枚举: 每个成员都有一个关联的字符串值。 enum Color { Red = "RED", Green = "GREEN", Blue = "BLUE", } let red: Color = Color.Red;3. 异构枚举: 枚举可以包含数字和字符串值,但不建议混合使用。...
TypeScript 泛型
在 TypeScript 中,泛型(Generics)是一种在编写可复用的、灵活的代码时非常强大的工具。泛型允许你编写不依赖于具体类型的代码,从而提高代码的灵活性。以下是 TypeScript 中泛型的基本概念和用法:1. 基本泛型语法: 使用 <T> 表示泛型,其中 T 是类型参数,可以是任何标识符。 function identity<T>(arg: T): T { return arg; } let result1: number = identity(1); let result2: string = identity("hello");2. 泛型函数: 在函数内使用泛型类型参数,可以使函数接受不同类型的参数。 function pair<T, U>(first: T, second: U): [T, U] { return [first, second]; } let stringAndNumber = pair("one", 1); l...
TypeScript 函数
在 TypeScript 中,函数是一种特殊的对象,可以包含代码块,并且可以在代码中被调用。以下是 TypeScript 函数的基本概念和用法:1. 函数声明: 使用 function 关键字来声明函数。 function add(x: number, y: number): number { return x + y; } let result: number = add(3, 4);2. 函数表达式: 函数可以被赋值给变量,这被称为函数表达式。 let multiply = function(x: number, y: number): number { return x * y; }; let product: number = multiply(5, 6);3. 箭头函数: 使用箭头函数表达更简洁的函数,尤其适用于简单的函数体。 let divide = (x: number, y: number): number => x / y; let quotient: number = divide(8, 2)...
TypeScript 类
在 TypeScript 中,类是面向对象编程的基础,它允许你创建具有属性和方法的对象。以下是 TypeScript 类的基本概念和用法:1. 类的基本语法: 使用 class 关键字来定义一个类,类可以包含属性(成员变量)和方法(成员函数)。 class Person { // 属性 firstName: string; lastName: string; // 构造函数 constructor(firstName: string, lastName: string) { this.firstName = firstName; this.lastName = lastName; } // 方法 getFullName(): string { return `${this.firstName} ${this.lastName}`; } } // 创建类的实例 let person = new Pers...
TypeScript 接口
在 TypeScript 中,接口(Interfaces)用于定义对象的结构和类型。通过接口,你可以描述对象应该具有的属性和方法。以下是一些关于 TypeScript 接口的基本概念和用法:1. 对象属性接口: 用于描述对象应该具有的属性和它们的类型。 interface Person { firstName: string; lastName: string; age: number; } let person: Person = { firstName: "John", lastName: "Doe", age: 30 };2. 可选属性: 通过在属性名后加上 ? 来表示可选属性。 interface Car { brand: string; model: string; year?: number; // 可选属性 } let myCar: Car = { brand: "To...
TypeScript 变量声明
在 TypeScript 中,变量声明可以使用 var、let 和 const 关键字。这些关键字有一些区别,特别是在作用域、变量提升和可变性方面。1. var: - 具有函数作用域(function-scoped),而不是块级作用域。 - 会进行变量提升(hoisting)。 function exampleVar() { if (true) { var x = 10; } console.log(x); // 可以访问 x,因为它具有函数作用域 }2. let: - 具有块级作用域(block-scoped),在块(例如 {})内定义的变量只在该块内可见。 - 不会进行变量提升。 function exampleLet() { if (true) { let y = 20; } // console.log(y); // 错误,y 在这里不可见 }3. const: - 声明一个只读的常量,一旦赋值后就不能再被修改。 - 具有块级作...
TypeScript 基础类型
TypeScript 提供了一系列基础类型,用于定义变量、函数参数和函数返回值等。以下是 TypeScript 的一些基础类型:1. 布尔类型(Boolean): 表示逻辑值 true 或 false。 let isDone: boolean = false;2. 数字类型(Number): 表示数值,包括整数和浮点数。 let decimal: number = 6; let float: number = 3.14;3. 字符串类型(String): 表示文本数据。 let color: string = "blue";4. 数组类型(Array): 表示一个数组,元素的类型可以是任意类型。 let numbers: number[] = [1, 2, 3]; let names: string[] = ["Alice", "Bob", "Charlie"]; 或者使用数组泛型: let moreNumbers: Array<number> =...
TypeScript 手册指南
TypeScript 官方提供了一份详细的手册,可以作为学习和参考的重要资源。以下是一份简短的 TypeScript 手册指南,帮助你开始学习和使用 TypeScript:1. 安装 TypeScript: 首先,确保你的系统中已经安装了 Node.js。然后,通过 npm 安装 TypeScript: npm install -g typescript2. 创建 TypeScript 文件: 创建一个以 .ts 结尾的 TypeScript 文件,比如 example.ts。3. 编写 TypeScript 代码: 在 example.ts 中编写你的 TypeScript 代码。例如: function greeter(person: string): string { return "Hello, " + person; } let user = "TypeScript"; console.log(greeter(user));4. 编译 TypeScript 代码: 打开终端,导航到包含你的...
TypeScript 快速入门
TypeScript 是一种由 Microsoft 开发的开源编程语言,它是 JavaScript 的超集,为 JavaScript 添加了静态类型检查和其他一些特性。以下是一个 TypeScript 的快速入门指南,帮助你开始使用 TypeScript。1. 安装 TypeScript首先,确保你的系统上安装了 Node.js 和 npm(Node 包管理器)。然后,通过以下命令安装 TypeScript:npm install -g typescript2. 创建 TypeScript 文件创建一个新的 TypeScript 文件,例如 app.ts:// app.tsfunction greet(person: string): string { return `Hello, ${person}!`;}const user = 'John';console.log(greet(user));3. 编写 TypeScript 代码在 app.ts 中,我们定义了一个简单的函数 greet,它接收一个参数 person,该参数应为字符串类型。然后我们创建了一个名为 ...