TypeScript基础知识点详解

TypeScript基础知识点详解

引言:
在现代前端开发中,TypeScript作为一种静态类型的JavaScript超集,越来越受到开发者的青睐。它提供了类型检查、编译时错误提示、代码重构和智能提示等功能,使得代码更加健壮、可维护。本文将详细介绍TypeScript的基础知识点,帮助读者快速入门并掌握其核心概念。

一、TypeScript简介

TypeScript是Microsoft开发的一种开源编程语言,它是JavaScript的一个超集,添加了静态类型定义。TypeScript通过TypeScript编译器或Babel转译为纯JavaScript代码,可以在任何支持JavaScript的环境中运行。TypeScript的主要特点包括:静态类型检查、基于类的面向对象编程、泛型、模块等。

二、基础类型

TypeScript支持多种基础类型,包括:布尔类型(boolean)、数字类型(number)、字符串类型(string)、数组类型(Array)、元组类型(Tuple)、枚举类型(Enum)、任意类型(Any)、空值(Void)、Null和Undefined、Never、对象类型(Object)等。通过这些基础类型,我们可以对变量进行明确的类型定义,提高代码的可读性和可维护性。

let isDone: boolean = false;  
let age: number = 30;  
let firstName: string = "Alice";  
let list: number[] = [1, 2, 3];  
let tuple: [string, number] = ["hello", 10];  
enum Color {Red, Green, Blue}  
let c: Color = Color.Green;  
let anything: any = "I am any type";  
let nothing: void = undefined; // 通常用于表示函数没有返回值  
let u: undefined = undefined;  
let n: null = null;  
let neverVar: never = (() => { throw new Error("Never!") })(); // never类型表示的是那些永不存在的值的类型

三、类型注解与类型推断

在TypeScript中,我们可以通过类型注解显式地定义变量的类型。类型注解以冒号(:)开头,后跟类型名称。例如:let count: number = 10; 表示定义了一个名为count的变量,其类型为number。此外,TypeScript还支持类型推断,即根据变量的初始值自动推断其类型。例如:let name = “Alice”; 在没有显式类型注解的情况下,TypeScript会自动推断name的类型为string。

四、接口(Interfaces)

接口是TypeScript中一个非常重要的概念,它定义了对象的形状,描述了对象应该具有的属性和方法。接口在TypeScript中起到了类型检查的作用,确保对象符合预期的结构。接口可以定义函数的形状、对象的形状以及混合类型的形状。通过接口,我们可以实现代码的解耦和复用。

interface Person {  firstName: string;  lastName: string;  
}  let person: Person = {  firstName: "Alice",  lastName: "Smith"  
};

五、类(Classes)

TypeScript支持基于类的面向对象编程。类定义了对象的属性和方法,并可以通过继承实现代码的重用。在TypeScript中,类的定义包括属性、构造函数和方法。属性可以定义为公共属性、私有属性或受保护属性。构造函数用于初始化类的实例。方法则定义了对象的行为。此外,TypeScript还支持访问修饰符、静态属性、抽象类等面向对象编程的概念。

class Animal {  name: string;  constructor(theName: string) {  this.name = theName;  }  move(distanceInMeters: number = 0) {  console.log(`${this.name} moved ${distanceInMeters}m.`);  }  
}  let dog = new Animal("Buddy");  
dog.move(10);

六、泛型(Generics)

泛型是TypeScript中一个强大的特性,它允许我们编写灵活的、可重用的代码,同时保持类型安全。泛型允许我们为类、接口和函数定义可复用的类型,这些类型在使用时可以指定具体的类型参数。通过泛型,我们可以避免在代码中出现不必要的类型转换和类型断言,提高代码的可读性和可维护性。

function identity<T>(arg: T): T {  return arg;  
}  let output1 = identity<string>("myString");  // type of output1 will be 'string'  
let output2 = identity(42);  // type inference used here, type of output2 will be 'number'

七、模块(Modules)

TypeScript中的模块允许我们将代码拆分为多个独立的文件,每个文件都可以有自己的作用域和导出的变量、函数、类等。模块的使用有助于实现代码的模块化、高内聚和低耦合。TypeScript支持CommonJS、AMD、UMD和ES6等模块加载规范。通过import和export关键字,我们可以在不同的模块之间共享代码和数据。
mathModule.ts

export function add(x: number, y: number): number {  return x + y;  
}  export function subtract(x: number, y: number): number {  return x - y;  
}

app.ts

import { add, subtract } from './mathModule';  let sum = add(10, 20);  
console.log(sum); // Output: 30  let difference = subtract(30, 10);  
console.log(difference); // Output: 20

八、类型断言

类型断言类似于其他语言的类型转换,但不完全相同。在TypeScript中,类型断言是告诉编译器:“我知道我在做什么,这个变量的类型应该是这个”。类型断言有两种形式:<Type>valuevalue as Type。例如,当你确信一个值是某个特定类型时,你可以使用类型断言来避免编译器的类型检查错误。

let someValue: any = "this is a string";  let strLength: number = (<string>someValue).length;  
// 或者使用 'as' 语法  
let strLengthAs: number = (someValue as string).length;  console.log(strLength); // Output: 17  
console.log(strLengthAs); // Output: 17

九、类型别名(Type Aliases)

类型别名是给一个类型起新名字的方式。类型别名有时和接口很相似,但是它们可以表示一些接口不能表示的类型。例如,你可以使用类型别名来为一个联合类型或交叉类型命名:

type Name = string;  
type Age = number;  
type PersonType = { name: Name, age: Age };  const person: PersonType = { name: "Alice", age: 30 };  
console.log(person.name); // Output: Alice

在这个例子中,NameOrResolver 是一个类型别名,它代表了一个字符串或者一个返回字符串的函数。

十、函数与函数重载

在TypeScript中,函数是基本的构建块。你可以给函数的参数和返回值指定类型,以增加代码的类型安全性。此外,TypeScript还支持函数重载,允许你为同一个函数名定义多个类型签名。这在处理可以接受不同参数类型和数量的函数时非常有用。

function combine(input1: number, input2: number): number;  
function combine(input1: string, input2: string): string;  function combine(input1: any, input2: any) {  if (typeof input1 === "number" && typeof input2 === "number") {  return input1 + input2;  }  if (typeof input1 === "string" && typeof input2 === "string") {  return input1.concat(input2);  }  return input1.toString().concat(input2.toString());  
}  let result1 = combine(10, 20); // Returns: 30  
let result2 = combine("Hello, ", "world!"); // Returns: "Hello, world!"

十一、装饰器(Decorators)

装饰器是一种特殊类型的声明,它可以附加到类声明、方法、属性或参数上。装饰器使用 @expression 这样的形式,其中 expression 必须计算为一个函数,该函数将在运行时被调用。装饰器在Angular等框架中广泛使用,用于添加元数据或修改类的行为。

function seal(target: Function) {  Object.seal(target);  Object.seal(target.prototype);  
}  @seal  
class Greeter {  greeting: string;  constructor(message: string) {  this.greeting = message;  }  greet() {  return "Hello, " + this.greeting;  }  
}  // 尝试修改Greeter类或其原型将失败,因为它已被密封

十二、编译选项与配置文件

TypeScript编译器(tsc)接受多种编译选项,这些选项可以影响编译过程和生成的JavaScript代码。这些选项通常在 tsconfig.json 配置文件中指定,包括目标ES版本、模块系统、JSX转换等。了解如何配置这些选项对于优化TypeScript项目至关重要。
TypeScript编译选项通常在 tsconfig.json 文件中配置。下面是一个简单的 tsconfig.json 示例:

{  "compilerOptions": {  "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */  "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNEXT'. */  "strict": true, /* Enable all strict type-checking options. */  "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */  "outDir": "./dist", /* Redirect output structure to the directory. */  "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */  // ... other options ...  },  "include": ["./src/**/*"], /* Specify a set of glob patterns that match TypeScript files to be included in compilation. */  "exclude": ["node_modules"] /* Exclude files from compilation. */  
}

十三、工具与生态系统

TypeScript的流行不仅仅是因为它的语言特性,还因为它拥有庞大的工具和生态系统。这包括各种编辑器支持(如Visual Studio Code的TypeScript插件)、构建工具(如Webpack和Rollup的TypeScript插件)、测试框架(如Jest的TypeScript支持)以及许多其他有用的库和框架。这些工具和资源使得使用TypeScript进行开发变得更加高效和愉快。

  • 编辑器支持:Visual Studio Code 提供了出色的 TypeScript 支持,包括智能代码补全、错误检查和重构工具。
  • 构建工具:Webpack 和 Rollup 都提供了 TypeScript 插件,允许你在构建过程中将 TypeScript 代码转换为
    JavaScript。
  • 测试框架:Jest 是一个流行的 JavaScript 测试框架,它也支持 TypeScript。你可以使用 Jest 来编写和运行
    TypeScript 代码的单元测试。
  • 库和框架:Angular、React 和 Vue 等前端框架都支持
    TypeScript,提供了类型安全和更好的开发工具支持。此外,还有许多专门的TypeScript 库可用于处理各种任务,如状态管理、路由和数据持久化等。

总结:

本文详细介绍了TypeScript的许多基础知识点,包括类型系统、接口、类、泛型、模块、类型断言、类型别名、函数与函数重载、装饰器以及编译选项与配置文件等。此外,还简要介绍了TypeScript的工具和生态系统。掌握这些知识点将帮助你更好地理解和使用TypeScript,从而编写出更加健壮、可维护和可扩展的代码。希望这篇文章能作为你TypeScript学习旅程的一个有益起点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI能不断进化吗?

AI的进化是一个持续的过程&#xff0c;并且随着时间推移和技术的发展&#xff0c;AI可以不断进化。这种进化可以包括以下几个方面&#xff1a; 1、算法和模型的改进&#xff1a; AI的进化可以通过改进其算法和模型来实现。研究人员不断提出新的算法和模型&#xff0c;使得AI在…

c语言中的宏指的是什么

在C语言中&#xff0c;宏&#xff08;Macro&#xff09;是一种预处理器的功能&#xff0c;用于将代码片段命名并用一个标识符替代。宏定义通过 #define 关键字完成&#xff0c;可以用于表示常量、创建函数样式的代码块&#xff0c;以及执行简单的文本替换。 举个例子&#xff…

Linux下定位内存踩踏问题的一种方法

Linux下定位内存踩踏问题的一种方法 演示代码(main.cpp)编译并执行输出 我们在Linux下用C/C开发具有一定复杂性的系统时,需要集成多个部门开发的SDK。内存越界的问题,往往让人头疼。本文提供了一种思路,用来定位内存踩踏。 开发者应该清楚哪块内存不应该被写入(或padding一块只…

IT基础监控与各IT体系模块的深化关系及其作用详解

IT基础监控作为运维工作的“眼睛”和“耳朵”&#xff0c;始终贯穿于自动化、容器化、云原生、团队协作及智能运维的实践中。以下是对IT基础监控与各IT体系模块之间关系的进一步补充和深化。 1. IT基础监控与自动化的深化关系 在自动化运维的实践中&#xff0c;基础监控不仅是…

C++11_C++回顾

范围for 对于一个有范围的集合而言&#xff0c;由程序员来说明循环的范围是很多余的&#xff0c;有时还很容易犯错误。因此C中引入了基于范围for循环。for循环后的括号由冒号":"分为两部分&#xff0c;第一部分是范围内用于迭代的变量&#xff0c;第二部分则表示被迭…

智慧餐饮系统架构的设计与实现

随着科技的不断发展&#xff0c;智慧餐饮系统在餐饮行业中扮演着越来越重要的角色。智慧餐饮系统整合了信息技术&#xff0c;以提高餐饮企业的管理效率、客户服务质量和市场竞争力。本文将探讨智慧餐饮系统架构的设计与实现&#xff0c;并探讨其在餐饮行业中的应用前景。 架构…

大文件上传

分片上传 将文件分为多个大小相等的小块&#xff0c;提高并发 前端将切割的每个分片按顺序传送给后端 后端收到分片后&#xff0c;记录特征信息&#xff08;MD5&#xff09; 按序号进行拼接 断点续传 将文件分为几个小块 每次上传时记录一个块信息&#xff0c;例如文件MD…

matlab采用不同数值方法求解微分方程

1、内容简介 略 60-可以交流、咨询、答疑 欧拉方法、改进欧拉、RK4、米尔斯坦方法求解微分方程 2、内容说明 略 lc; close all; clear all; % 参数赋值 global a global b global h a 1; b 2; Ni 1000; % 总步数 h 0.001; % 步长Xt1(1:Ni) 0; Xt2(…

【前端素材】推荐优质后台管理系统PORTAL平台模板(附源码)

一、需求分析 后台管理系统是一种具有多层次结构的软件系统&#xff0c;用于管理网站、应用程序或系统的后台操作和管理。下面是对后台管理系统的分层次、详细分析&#xff1a; 第一层&#xff1a;用户界面层 登录界面&#xff1a;提供用户登录验证&#xff0c;确保只有经过授…

MySQL 数据优化技巧:提升百万级数据聚合统计速度

MySQL 数据优化技巧&#xff1a;提升百万级数据聚合统计速度 MySQL 数据优化技巧&#xff1a;提升百万级数据聚合统计速度摘要引言索引优化1. 使用合适的索引类型2. 聚簇索引的应用 查询优化3. 减少数据检索范围4. 避免全表扫描 数据库设计优化5. 合理划分数据表6. 使用分区表 …

AI如何与企业应用交互

人工智能&#xff08;AI&#xff09;与企业应用的交互可以通过多种方式实现&#xff0c;以下是一些常见的方式&#xff1a; 1、智能助理和聊天机器人&#xff1a;企业可以在其应用程序中集成智能助理或聊天机器人&#xff0c;以帮助用户解决常见问题、获取信息或执行特定任务。…

算法训练营day35, 二叉搜索树的范围和

package main type TreeNode struct { Val int Left *TreeNode Right *TreeNode } //938. 二叉搜索树的范围和 func rangeSumBST(root *TreeNode, low int, high int) int { sum : 0 if root nil { return sum } //中序遍历左中右处理即可 var searchBST func(node *Tr…

零基础学Python入门教程非常详细(从小白到高级),入门必看

目录&#xff1a;基础 第一章-第五章&#xff08;5.1-5.4&#xff09;&#xff1a;简介、配置与基础知识 第六章&#xff1a;判断语句 第一章&#xff1a;Python的概述 1.1&#xff1a;什么是Python? Python它是一种直译式&#xff0c;面向对象&#xff0c;解释式的脚本语…

NASA Earthdata wget批量下载

1 wegt下载 GNU Wget 1.21.4 for Windows (eternallybored.org) 2 创建your .urs_cookies and .dodsrc文件 只需要创建.urs_cookies文件 其实&#xff0c;通过txt可以直接创建 这个文件你想放到哪里&#xff0c;就放到哪里 Create .urs_cookies file: On Mac/Linux: cd ~ o…

QT TCP通讯客户端与服务端

服务端 // 自定义如下 private:QTcpServer *tcpserver; //TCP服务器QTcpSocket *tcpsocket;// TCP通讯socketQString GetLocalIpAddress(); // 获取本机的IP地址private slots:void clientconnect();void clientdisconnect();void socketreaddata();void newconnection();void …

[C++]C++计算时间

在C中&#xff0c;有几种方法可以用来统计代码的运算时间&#xff1a; 使用std::chrono库&#xff1a; C11引入了chrono库&#xff0c;用于处理时间相关的操作。通过使用std::chrono::system_clock和std::chrono::duration_cast&#xff0c;可以很容易地测量代码段的执行时间。…

图片上叠加文字

在一个原有图片上叠加上指定的文字 编写一个工具类实现文字叠加的功能&#xff0c;叫ImageUttils import cn.hutool.core.img.Img; import cn.hutool.core.io.resource.Resource;import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Val…

绝对路径拼接漏洞 [NISACTF 2022]babyupload

打开题目 最开始以为是文件上传的漏洞 结果发现无论我们上传什么文件都会显示bad filename 去网上看了大佬的wp知道 我们直接去看源代码得到提示 /source 那我们去访问一下这个路径看看 得到一个下载文件 用记事本打开得到 源代码如下 from flask import Flask, request, r…

软考46-上午题-【数据库】-数据查询语言DQL1

一、SQL数据查询功能 SELECT语句的语法如下&#xff1a; 【注意】&#xff1a; 使用DISTINCT选项可以去重&#xff1b; form子句中出现多个基本表或视图时&#xff0c;系统首先执行笛卡尔积操作。 下面的查询示例均以这些表为基础 1-1、投影查询-SELECT 【回顾】&#xff1a;…

设计模式(七)装饰模式

相关文章设计模式系列 1.装饰模式简介 装饰模式介绍 装饰模式是结构型设计模式之一&#xff0c;不必改变类文件和使用继承的情况下&#xff0c;动态地扩展一个对象的功能&#xff0c;是继承的替代方案之一。它是通过创建一个包装对象&#xff0c;也就是装饰来包裹真实的对象…