TS-语法介绍

1. 基本语法

变量声明

TypeScript 中的变量声明方式有 letconstvar,推荐使用 letconst

let isDone: boolean = false;
const PI: number = 3.14;

函数

函数声明与 JavaScript 类似,但可以指定参数和返回值类型。

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

解构赋值

解构赋值允许从数组或对象中提取值,分别赋给不同的变量。

let [a, b] = [1, 2];
let { name, age } = { name: "John", age: 30 };

展开运算符

展开运算符可以用于数组和对象。

let arr = [1, 2, 3];
let newArr = [...arr, 4, 5];let obj = { name: "John", age: 30 };
let newObj = { ...obj, location: "USA" };

2. 类型系统

基本类型

TypeScript 提供了丰富的基本类型,包括 booleannumberstringarraytupleenumanyvoidnullundefinednever

let isDone: boolean = false;
let age: number = 30;
let userName: string = "John";
let numbers: number[] = [1, 2, 3];
let tuple: [string, number] = ["John", 30];
enum Color {Red, Green, Blue}
let color: Color = Color.Green;

联合类型

联合类型表示一个值可以是几种类型之一。

let value: string | number;
value = "Hello";
value = 42;

交叉类型

交叉类型将多个类型合并为一个类型,包含了所需的所有类型特性。

interface Person {name: string;
}interface Employee {employeeId: number;
}type EmployeePerson = Person & Employee;let emp: EmployeePerson = {name: "John",employeeId: 1234
};

类型别名

类型别名可以为任意类型创建新名称。

type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;function getName(n: NameOrResolver): Name {if (typeof n === "string") {return n;} else {return n();}
}

类型断言

类型断言有两种形式:尖括号语法和 as 语法。

let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;

3. 接口

接口用于定义对象的类型。

interface Person {name: string;age: number;
}let john: Person = { name: "John", age: 30 };

接口还可以描述函数类型和可索引类型。

interface SearchFunc {(source: string, subString: string): boolean;
}let mySearch: SearchFunc;
mySearch = function (src: string, sub: string): boolean {return src.search(sub) !== -1;
};

4. 类

类是 TypeScript 中的核心概念,用于定义对象的蓝图。

class Person {name: string;constructor(name: string) {this.name = name;}greet() {console.log(`Hello, my name is ${this.name}`);}
}let john = new Person("John");
john.greet();

继承

类可以通过继承来复用代码。

class Employee extends Person {employeeId: number;constructor(name: string, employeeId: number) {super(name);this.employeeId = employeeId;}work() {console.log(`${this.name} is working`);}
}let emp = new Employee("John", 1234);
emp.greet();
emp.work();

接口与类

类可以实现接口,从而强制类遵循接口的结构。

interface IPerson {name: string;greet(): void;
}class Person implements IPerson {name: string;constructor(name: string) {this.name = name;}greet() {console.log(`Hello, my name is ${this.name}`);}
}

修饰符

TypeScript 支持访问修饰符:public(默认)、privateprotected

class Person {public name: string;private age: number;protected gender: string;constructor(name: string, age: number, gender: string) {this.name = name;this.age = age;this.gender = gender;}
}

5. 泛型

泛型使得函数和类可以处理不特定的类型,从而更具复用性。

function identity<T>(arg: T): T {return arg;
}let output1 = identity<string>("myString");
let output2 = identity<number>(100);

泛型类和泛型接口也广泛应用于 TypeScript。

class GenericNumber<T> {zeroValue: T;add: (x: T, y: T) => T;
}let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function (x, y) {return x + y;
};

6. 模块

模块是 TypeScript 中组织代码的主要方式,使用 importexport 关键字。

// math.ts
export function add(x: number, y: number): number {return x + y;
}// app.ts
import { add } from './math';
console.log(add(2, 3));

7. 命名空间

命名空间用于在一个文件中组织代码,防止全局作用域污染。

namespace Validation {export interface StringValidator {isAcceptable(s: string): boolean;}export const lettersRegexp = /^[A-Za-z]+$/;
}// 使用命名空间
let validator: Validation.StringValidator;
validator = { isAcceptable: s => Validation.lettersRegexp.test(s) };

8. 装饰器

装饰器是一种特殊的声明,附加在类声明、方法、访问符、属性或参数上。需要在 tsconfig.json 中启用 experimentalDecorators

function sealed(constructor: Function) {Object.seal(constructor);Object.seal(constructor.prototype);
}@sealed
class Greeter {greeting: string;constructor(message: string) {this.greeting = message;}greet() {return `Hello, ${this.greeting}`;}
}

总结

TypeScript 提供了丰富的语法特性,使得 JavaScript 的开发更具类型安全性和可维护性。从基本语法到高级特性,掌握这些语法特性可以极大提升开发效率和代码质量。希望这篇文章能帮助你全面理解和使用 TypeScript。

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

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

相关文章

ESD与EOS区别

最近小白在做项目时&#xff0c;被一个实习生问道了&#xff0c;关于EOS与ESD区别。说实话&#xff0c;以前专注于测试debug的我&#xff0c;在回答对方时&#xff0c;并没法做到太全面的解答。于是乎&#xff0c;借助周内的空闲时间&#xff0c;小白还是简单学习总结了一番。 …

洛谷 AT_arc168_a [ARC168A] <Inversion> 题解

逆序对 在一个没有重复数值的序列 a a a 之中&#xff0c;如果存在一组下标 i i i 和 j j j 使得 i < j i<j i<j&#xff0c;那么当 a i > a j a_i>a_j ai​>aj​ 时&#xff0c;就称 a i a_i ai​ 和 a j a_j aj​ 是序列 a a a 中的一组逆序对。 …

Harbor镜像中心搭建

文章目录 Harbor镜像中心搭建前置条件下载Harbor创建CA证书配置Harbor开始启动地址映射访问配置本地登录配置外部虚拟机访问 Harbor镜像中心搭建 Harbor是一个镜像中心&#xff0c;我们所熟知的DockerHub就是一个镜像中心&#xff0c;我们可以把我们打包的镜像放在镜像中心中供…

JavaFX应用

JavaFX案例&#xff1a;集成进度条与后台任务 在这个示例中&#xff0c;我们将向JavaFX应用中集成一个进度条&#xff0c;用来展示一个模拟的后台任务的完成进度。这将涉及JavaFX的并发特性&#xff0c;特别是Task类和如何在UI线程安全地更新UI组件。 假设我们想要实现一个简…

关于Java

关于Java Java语言关于并发JVM调优工具写在最后 Java语言 Java语言作为当下主流开发语言&#xff0c;其面向对象的开发模式以及一次编译多次运行&#xff0c;跨平台运行以及自动的垃圾回收机制可以说是给开发者节省了很大的时间用于逻辑功能的开发&#xff0c;那么在开发过程中…

【Linux】pycharmgit相关操作

目录 1. git安装配置2. 相关内容3. pycharm连接远程仓库3.1 配置3.2 clone远程仓库3.3 本地仓库上传远程 4. 分支管理4.1 更新代码4.2 新建分支4.3 分支合并4.4 代码比对 5. 版本管理6. 命令行操作6.1 配置git6.2 基础操作6.3 分支操作 1. git安装配置 下载链接&#xff1a;官…

07--Zabbix监控告警

前言&#xff1a;和普米一样运维必会的技能&#xff0c;这里总结一下&#xff0c;适用范围非常广泛&#xff0c;有图形化界面&#xff0c;能帮助运维极快确定问题所在&#xff0c;这里记录下概念和基础操作。 1、zabbix简介 Zabbix是一个基于 Web 界面的企业级开源解决方案&a…

【C++】C++入门的杂碎知识点

思维导图大纲&#xff1a; namespac命名空间 什么是namespace命名空间namespace命名空间有什么用 什么是命名空间 namespace命名空间是一种域&#xff0c;它可以将内部的成员隔绝起来。举个例子&#xff0c;我们都知道有全局变量和局部变量&#xff0c;全局变量存在于全局域…

路由组件和非路由组件区别:

1、总结 路由组件和非路由组件区别&#xff1a; 非路由组件放在components中&#xff0c;路由组件放在pages或views中非路由组件通过标签使用&#xff0c;路由组件通过路由使用在main.js注册玩路由&#xff0c;所有的路由和非路由组件身上都会拥有$router $route属性$router&a…

SQLAlchemy:filter()和filter_by()的微妙差异

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 在Python编程中&#xff0c;SQLAlchemy是一个强大的ORM&#xff08;对象关系映射&#xff09;工具&#xff0c;它允许使用Python代码来操作数据库。然而&#xff0c;对于新手来说&#xff0c;SQLAlchemy中的一些函数…

Web前端开发PPT:深入探索与实战应用

Web前端开发PPT&#xff1a;深入探索与实战应用 在数字化时代&#xff0c;Web前端开发已成为构建丰富、交互性强的网页应用的关键环节。本次分享旨在通过PPT的形式&#xff0c;带领大家深入探索Web前端开发的精髓&#xff0c;并分享一些实战应用的经验。接下来&#xff0c;我们…

mybatis-plus使用拦截器实现sql完整打印

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 在使用mybatis-plus&#xff08;mybatis&#xff09;的时候&#xff0c;往往需要…

【C语言】多进程创建和回收

多进程创建和回收 一、多进程创建和回收1. fork()2. wait()3. waitpid() 最后 一、多进程创建和回收 孤儿进程&#xff1a;父进程先退出了&#xff0c;子进程没有退出&#xff0c;成为孤儿进程&#xff0c;父进程变成1号进程。僵尸进程&#xff1a;父进程没有退出&#xff0c;…

英伟达开源最强通用模型Nemotron-4 340B:开启AI合成数据新纪元

【震撼发布】 英伟达最新力作——Nemotron-4 340B,一个拥有3400亿参数的超级通用模型,震撼登场!这不仅是技术的一大飞跃,更是AI领域的一次革命性突破! 【性能卓越】 Nemotron-4 340B以其卓越的性能超越了Llama-3,专为合成数据而生。它将为医疗健康、金融、制造、零售等行…

Studio One 6.6.2 for Mac怎么激活,有Studio One 6激活码吗?

如果您是一名音乐制作人&#xff0c;您是否曾经为了寻找一个合适的音频工作站而苦恼过&#xff1f;Studio One 6 for Mac是一款非常适合您的MacBook的音频工作站。它可以帮助您轻松地录制、编辑、混音和发布您的音乐作品。 Studio One 6.6.2 for Mac具有直观的界面和强大的功能…

C++初学者指南第一步---1. C++开发环境设置

C初学者指南第一步—1. C开发环境设置 目录 C初学者指南第一步---1. C开发环境设置1.1 工具1.1.1 代码编辑器和IDE1.1.2 Windows1.1.3 命令行界面 1.2 编译器1.2.1 gcc/g (支持Linux/Windows/MacOSX)1.2.2 clang/clang (支持Linux/Windows/MacOS)1.2.3 Microsoft Visual Studio…

《面向对象程序设计》第3章 类与对象(判断、选择、填空)-练习

1-1 常量对象可以使用常量成员函数。 T F | 参考答案 答案 T 2分 1-2 在定义常量成员函数和声明常量成员函数时都应该使用const关键字。 T F | 参考答案 答案 T 2分 1-3 对象间赋值将调用拷贝构造函数。 T F | 参考答案 答案 F 2分 1-4 对象数组生命期…

奇思妙想-可以通过图片闻见味道的设计

奇思妙想-可以通过图片闻见味道的设计 偷闲半日享清闲&#xff0c;炭火烧烤乐无边。肉串飘香引客至&#xff0c;笑语欢声绕云间。人生难得几回醉&#xff0c;且把烦恼抛九天。今宵共饮开怀酒&#xff0c;改日再战新篇章。周四的傍晚&#xff0c;难得的闲暇时光让我与几位挚友相…

数据仓库和数据库的区别

数据仓库和数据库在许多方面存在显著的区别&#xff0c;主要体现在数据的用途、架构、设计原则和性能优化上。以下是两者之间的详细区别&#xff1a; 1. 目的和用途 数据库&#xff08;Database&#xff09;&#xff1a; 主要用途&#xff1a;用于日常业务操作和事务处理。数据…

PAT B1026. 程序运行时间

题目描述 要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock(&#xff09;函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。同时还有一个常数CLK_TCK——给出了机器时钟每秒所走的时钟打点数…