第Ⅰ章-VII Typescript主要功能概览

server/2024/10/18 22:36:55/

第Ⅰ章-Ⅰ 了解Vue3 创建一个Vue3项目
第Ⅰ章-Ⅱ Vue3自定义创建项目 项目文件详解
第Ⅰ章-III Vite 创建vue3 项目
第Ⅰ章-IV npm yarn pnpm 包管理器
第Ⅰ章-V package.json文件详解
第Ⅰ章-VI 熟练掌握ES6新特性

第Ⅰ章-VII Typescript主要功能概览

  • 简介
  • 语法特性
    • 类型系统
    • 面向对象特性
    • 函数特性
    • 模块与命名空间
    • 其他特性

简介

TypeScript2012发布,是一种由微软开发的自由和开源的编程语言,它是 JavaScript 的一个超集,扩展了 JavaScript 的语法。增加了类型检查、类和接口等高级特性,以帮助开发者编写更健壮、可维护的代码。

  • JavaScript 的超集:TypeScript 是 JavaScript 的超集,意味着所有合法的 JavaScript 代码都是合法的 TypeScript 代码。TypeScript 添加了静态类型系统和其他特性,使其更适合大型项目的开发。
  • 编译器:TypeScript 代码在运行前需要通过 TypeScript 编译器(tsc)编译成 JavaScript。这个编译过程可以检查代码中的类型错误,生成与目标 JavaScript 版本(如 ES5、ES6)兼容的代码。
  • 生态系统:TypeScript 拥有一个丰富的生态系统,包括大量的工具、库和社区资源。

语法特性

TypeScript 引入了一套静态类型系统,可以在编译时检查类型错误。

类型系统

  • 基本类型:包括 string、number、boolean、any 等,用于定义不同的数据类型。
  • 复杂类型:定义数组、元组、枚举、联合类型、交叉类型等复杂类型,以描述更复杂的数据结构。
  • 自定义类型:可以通过 type 关键字来定义类型别名或组合类型,以更灵活地描述数据。
typescript">//定义了一个名为UserId的联合类型 
type UserId = number | string;

可以多出重用,是代码可读性更强。

  • 类型断言:用于显式地将一个值转换为特定类型。
typescript">let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
  • 类型推断:TypeScript 可以自动推断变量、函数返回值等的类型,从而简化代码编写过程。
typescript">let message="Hello,World!";
let count=42;
message="Hi!";//可以重新赋值为字符串
//message =10 //报错 不能将number 分配给 string
count=100;//可以重新赋值为证书
// count="foo";//报错:不能将string 分配给number

面向对象特性

  • 类(Class):TypeScript 支持面向对象的类,包括属性、方法、构造函数、继承等。
    javavscript 写法
javascript">class Animal {constructor(name) {this.name = name;}speak() {console.log(`${this.name} makes a noise.`);}
}
const dog = new Animal("Buddy");
dog.speak(); // 输出 "Buddy makes a noise."

typescript

typescript">class Animal {constructor(public name: string) {}speak() {console.log(`${this.name} makes a sound.`);}
}
  • 接口(Interface):接口定义了一组属性和方法,可以用于描述对象的形状
typescript">interface Person {name: string;age: number;speak(): void;
}
  • 修饰符:TypeScript 支持 public、private、protected 等访问修饰符,用于控制类属性和方法的可见性。
  • 抽象类:抽象类可以用于定义基础类,并强制子类实现特定的方法。
typescript">abstract class Shape {abstract getArea(): number;
}class Rectangle extends Shape {constructor(private width: number, private height: number) {super();}getArea() {return this.width * this.height;}
}

//javascript 继承类

javascript">class Dog extends Animal {speak() {console.log(`${this.name} barks.`);}
}const dog = new Dog("Tom");
dog.speak(); // 输出 "Tom barks."
  • 泛型:泛型可以用于函数、接口、类等,以创建更通用的代码
typescript">function identity<T>(arg: T): T {return arg;
}

函数特性

  • 函数类型:TypeScript 允许为函数指定类型签名,包括参数和返回值类型。
typescript">function add(x: number, y: number): number {return x + y;
}
  • 可选参数:可以通过在参数后添加 ? 来定义可选参数。
typescript">function greet(name?: string) {if (name) {console.log(`Hello, ${name}`);} else {console.log("Hello, world!");}
}
  • 剩余参数:使用 … 来定义可变数量的参数。
typescript">function sum(...numbers: number[]): number {return numbers.reduce((a, b) => a + b, 0);
}
  • 函数重载:可以定义多个函数签名,以支持不同参数类型的重载。
typescript">function getLength(x: string): number;
function getLength(x: any[]): number;
function getLength(x: any): number {return x.length;
}

模块与命名空间

  • 模块:TypeScript 支持 ES6 模块语法,可以使用 import 和 export 进行模块化开发。
typescript">// utils.ts
export function add(a: number, b: number): number {return a + b;
}// main.ts
import { add } from './utils';
console.log(add(1, 2)); // 输出 3
  • 命名空间:TypeScript 支持命名空间,可以用于组织代码。
typescript">namespace Utils {export function add(a: number, b: number): number {return a + b;}
}console.log(Utils.add(1, 2)); // 输出 3

其他特性

  • readonly 属性:可以用于定义只读属性,确保对象的某些属性不可修改。
typescript">class Person {constructor(public readonly name: string) {}
}const p = new Person("Alice");
// p.name = "Bob"; // 报错:Cannot assign to 'name' because it is a read-only property.
  • 装饰器:TypeScript 支持装饰器,用于为类、方法、属性等添加元数据或行为。
typescript">function Log(target: any, propertyKey: string, descriptor: PropertyDescriptor) {const originalMethod = descriptor.value;descriptor.value = function(...args: any[]) {console.log(`Calling ${propertyKey} with arguments:`, args);return originalMethod.apply(this, args);};
}class Example {@Loggreet(name: string) {console.log(`Hello, ${name}`);}
}const ex = new Example();
ex.greet("World");
  • 类型守卫:可以使用类型守卫来确保在运行时操作特定类型的数据。
typescript">function isString(x: any): x is string {return typeof x === 'string';
}
function printLength(x: any) {if (isString(x)) {console.log(x.length);} else {console.log("Not a string.");}
}

http://www.ppmy.cn/server/33446.html

相关文章

【kettle006】kettle访问华为openGauss高斯数据库并处理数据至execl文件(已更新)

1.一直以来想写下基于kettle的系列文章&#xff0c;作为较火的数据ETL工具&#xff0c;也是日常项目开发中常用的一款工具&#xff0c;最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下华为openGauss高斯数据库相关知识体系 3.欢迎批评指正&#xff0c;跪谢…

库存管理系统开源啦

软件介绍 ModernWMS是一个针对小型物流仓储供应链流程的开源库存管理系统。该系统的开发初衷是为了满足中小型企业在有限IT预算下对仓储管理的需求。通过总结多年ERP系统研发经验&#xff0c;项目团队开发了这套适用于中小型企业的系统&#xff0c;以帮助那些有特定需求的用户。…

MYSQL从入门到精通(一)

1、概述 【1】使用率最高 2、数据库的重要性 【1】数组、集合、文件 【2】数据管理系统-MySQL 【3】持久化数据&#xff0c;容易管理、查询 3、相关概念 【1】DB database 数据库 【2】DBMS 数据库管理系统&#xff08;MySQL就是其中一种&#xff09; 【3】SQL 结构查询语…

区块链 | IPFS:IPNS(实操版)

&#x1f98a;原文&#xff1a;Publishing IPNS names Publishing IPNS names with Kubo Step1&#xff1a; 启动你的 IPFS 守护进程&#xff08;如果尚未运行&#xff09;&#xff1a; $ ipfs daemon说明&#xff1a;以 $ 开头的是命令&#xff0c;以 > 开头的是执行结果…

数据库面试常问3

视图的作用&#xff1f; 视图是一种虚拟的表&#xff0c;由一个或多个基本表&#xff08;或其他视图&#xff09;的行和列组成。它可以根据定义查询基本表&#xff0c;并返回所需的结果集。视图的主要作用包括&#xff1a; 简化复杂的查询&#xff1a;将多个表的关联查询合并…

麦克纳姆轮 Mecanum 小车运动学模型和动力学分析

目录 一、简介 二、运动学模型分析 1. 逆运动学方程 2. 正运动学方程 三、动力学模型 四、广泛运动学模型 一、简介 参考文献https://www.geometrie.tugraz.at/gfrerrer/publications/MecanumWheel.pdf 移动机器人的运动学模型是为了解决小车的正向运动学和逆向运动学问…

构筑稳固基石:HTML网站架构与结构设计的深度探索

构筑稳固基石&#xff1a;HTML网站架构与结构设计的深度探索 在万维网的广阔天地里&#xff0c;每一个网站都是信息的港湾&#xff0c;而HTML作为这一切的基础&#xff0c;其架构与结构设计直接决定了站点的可访问性、可维护性和扩展性。本文将带你深入HTML的架构世界&#xf…

xss注入漏洞解析(下)

DOM型XSS 概念 DOM全称Document Object Model&#xff0c;使用DOM可以使程序和脚本能够动态访问和更新文档的内容、结 构及样式。DOM型XSS其实是一种特殊类型的反射型XSS&#xff0c;它是基于DOM文档对象模型的一种漏洞。 HTML的标签都是节点&#xff0c;而这些节点组成了DOM的…