「TypeScript系列」TypeScript简介及基础语法

文章目录

  • 一、TypeScript简介
  • 二、TypeScript基础语法
    • 1. 变量声明
    • 2. 函数
    • 3. 类
    • 4. 接口
    • 5. 类型别名
    • 6. 泛型
    • 7. 模块
    • 8. 类型断言
  • 三、TypeScript面向对象
    • 1. 类(Class)
    • 2. 继承(Inheritance)
    • 3. 封装(Encapsulation)
    • 4. 多态(Polymorphism)
  • 四、相关链接

一、TypeScript简介

TypeScript 是 JavaScript 的一个超集,添加了静态类型系统和其他特性,如接口、枚举、泛型等。这些特性有助于在开发过程中捕获错误,并使代码更易于维护和理解。TypeScript 编译成纯 JavaScript,因此可以在任何支持 JavaScript 的环境中运行。

TypeScript 的一些主要特点

  1. 静态类型:TypeScript 提供了静态类型系统,允许你为变量、函数参数和函数返回值指定类型。这有助于在编译时捕获类型错误,减少运行时错误。
  2. 接口:TypeScript 支持接口,这是一种定义对象形状的方式。接口可以确保类或其他对象具有特定的属性或方法。
  3. 枚举:TypeScript 的枚举类型提供了一种定义数值集合的方式。与在 JavaScript 中手动创建这样的集合相比,枚举类型提供了更好的可读性和安全性。
  4. 泛型:泛型允许你在编写代码时使用类型参数,这些参数将在代码实例化时被替换为具体的类型。这有助于编写可重用的组件,这些组件可以处理多种类型的数据。
  5. :TypeScript 提供了类(class)语法,用于定义对象的结构和行为。类可以包含属性(成员变量)、方法(成员函数)和构造函数等。
  6. 装饰器:装饰器是 TypeScript 的一种特殊声明,它可以被附加到类声明、方法、属性或参数上。装饰器使用 @expression 的形式,expression 必须求值为一个函数,它会在运行时被调用,被装饰的声明信息作为参数传入。
  7. 模块:TypeScript 支持 ES6 模块语法,允许你将代码拆分成可重用的模块。模块可以导入其他模块中导出的功能,并导出自己的功能供其他模块使用。
  8. 命名空间:TypeScript 的命名空间用于将相关的代码组织在一起,以避免命名冲突。命名空间可以包含类、接口、函数等。
  9. JSX:TypeScript 支持 JSX,这是一种在 JavaScript 代码中嵌入 XML(或 HTML)的语法。JSX 使得在 React 等库中编写组件变得更加简单直观。
  10. 工具支持:TypeScript 提供了丰富的工具支持,如 IntelliSense(智能感知)和类型检查等,这些工具可以提高开发效率并减少错误。

二、TypeScript基础语法

TypeScript 是 JavaScript 的一个超集,它添加了静态类型系统和其他特性,使代码更加健壮和可维护。下面是一些 TypeScript 的基础语法及详细案例。

1. 变量声明

在 TypeScript 中,你可以为变量指定类型。

let isDone: boolean = false;
let decimal: number = 6;
let color: string = "blue";
let name: string | null = null; // 使用联合类型

// 使用数组类型
let list: number[] = [1, 2, 3];

// 使用元组类型
let x: [string, number] = ["hello", 10];

// 使用枚举类型
enum Color {Red, Green, Blue}
let c: Color = Color.Green;

2. 函数

函数可以带有参数,参数和返回值都可以指定类型。

function greet(name: string): string {
    return "Hello, " + name;
}

// 可选参数
function greetWithOptional(name: string, age?: number): string {
    let result = "Hello, " + name;
    if (age) {
        result += ", you are " + age + " years old.";
    }
    return result;
}

// 默认参数
function greetWithDefault(name: string, age: number = 25): string {
    return "Hello, " + name + ". You are " + age + " years old.";
}

3. 类

TypeScript 支持类,包括继承、构造函数、属性和方法。

class Animal {
    name: string;

    constructor(theName: string) { this.name = theName; }

    move(distanceInMeters: number = 0) {
        console.log(`${this.name} moved ${distanceInMeters}m.`);
    }
}

class Dog extends Animal {
    bark() {
        console.log(`${this.name} says Woof!`);
    }
}

let myDog = new Dog("Mitzie");
myDog.bark();
myDog.move(10);

4. 接口

接口用于定义对象的形状。

interface Person {
    firstName: string;
    lastName: string;
    age?: number; // 可选属性
    greet(otherPerson: Person): void; // 方法
}

let customer: Person = {
    firstName: "Jane",
    lastName: "Doe",
    greet(otherPerson: Person) {
        console.log(`Hello, ${otherPerson.firstName} ${otherPerson.lastName}!`);
    }
};

customer.greet({ firstName: "Bob", lastName: "Smith" });

5. 类型别名

使用 type 关键字可以为类型创建别名。

type Name = string;
type NameOrNumber = string | number;
type Callback = () => void;

let myName: Name = "Alice";
let myNameOrAge: NameOrNumber = 42;
let myCallback: Callback = () => console.log("Hello!");

6. 泛型

泛型允许你在定义函数、接口或类时,使用类型参数。

function identity<T>(arg: T): T {
    return arg;
}

let output = identity<string>("myString"); // 类型参数是 string
let output2 = identity(42); // 不需要显式指定类型参数,编译器可以推断出 T 是 number

7. 模块

使用模块来组织代码。

// myModule.ts
export function sayHello(name: string) {
    return "Hello, " + name;
}

// main.ts
import { sayHello } from './myModule';
console.log(sayHello("World"));

8. 类型断言

类型断言用于告诉 TypeScript 编译器:“我知道我在做什么,我确定这个值是这个类型。”

let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
// 或者使用 as 语法
let strLength2: number = (someValue as string).length;

三、TypeScript面向对象

TypeScript 是一种面向对象的编程语言,因为它支持类(class)、接口(interface)、继承(inheritance)、封装(encapsulation)和多态(polymorphism)等面向对象编程(OOP)的核心概念。这些特性使得 TypeScript 非常适合构建可维护、可扩展和可重用的代码库。

TypeScript 中面向对象编程的一些核心概念

1. 类(Class)

类是一种用户定义的数据类型,它拥有属性和方法。在 TypeScript 中,你可以使用 class 关键字来定义类。

class Animal {
    name: string;

    constructor(name: string) {
        this.name = name;
    }

    speak(): void {
        console.log(`${this.name} makes a noise.`);
    }
}

let dog = new Animal('Buddy');
dog.speak(); // 输出: Buddy makes a noise.

2. 继承(Inheritance)

继承允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。在 TypeScript 中,你可以使用 extends 关键字来实现继承。

class Dog extends Animal {
    bark(): void {
        console.log(`${this.name} says Woof!`);
    }
}

let myDog = new Dog('Spike');
myDog.speak(); // 继承自 Animal 的 speak 方法
myDog.bark(); // Dog 类特有的 bark 方法

3. 封装(Encapsulation)

封装是将对象的属性和方法组合成一个单独的单元,并通过接口与外部进行交互。在 TypeScript 中,封装是通过类的私有(private)和保护(protected)成员来实现的。

class Person {
    private _age: number;

    constructor(age: number) {
        this._age = age;
    }

    // 提供一个公有的 getter 方法来访问私有属性
    get age(): number {
        return this._age;
    }
}

let person = new Person(30);
console.log(person.age); // 访问公有的 getter 方法来获取私有属性
// console.log(person._age); // 这会报错,因为 _age 是私有的

4. 多态(Polymorphism)

多态是面向对象编程中的一个重要概念,它允许不同的对象对同一消息做出不同的响应。在 TypeScript 中,多态通常通过接口和类的继承来实现。

interface Shape {
    area(): number;
}

class Circle implements Shape {
    radius: number;

    constructor(radius: number) {
        this.radius = radius;
    }

    area(): number {
        return Math.PI * this.radius ** 2;
    }
}

class Rectangle implements Shape {
    width: number;
    height: number;

    constructor(width: number, height: number) {
        this.width = width;
        this.height = height;
    }

    area(): number {
        return this.width * this.height;
    }
}

function calculateTotalArea(shapes: Shape[]): number {
    let totalArea = 0;
    for (let shape of shapes) {
        totalArea += shape.area(); // 多态:不同的形状对象调用同一个 area 方法
    }
    return totalArea;
}

let circle = new Circle(5);
let rectangle = new Rectangle(4, 6);
console.log(calculateTotalArea([circle, rectangle])); // 输出总面积

在这个例子中,Shape 接口定义了一个 area 方法,CircleRectangle 类都实现了这个接口并提供了自己的 area 方法实现。这样,我们就可以在一个函数中接受一个 Shape 类型的数组,并调用每个形状的 area 方法来计算总面积,这就是多态的体现。

四、相关链接

  1. TypeScript中文网
  2. TypeScript下载
  3. TypeScript文档

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

短信平台群发服务有什么优点

短信平台群发服务有什么优点 提高营销效率 短信平台群发服务利用自动化技术&#xff0c;可以帮助企业迅速向大量潜在客户营销信息。相比传统的逐一方式&#xff0c;群发服务可以同时大批目标客户&#xff0c;大大提高了营销效率。企业可以轻松地在短时间内覆盖更多的潜在客户&…

JavaSE——异常(2/2)-异常的处理(记录异常并提示 、尝试重新修复)

目录 记录异常并提示 案例演示 流程解析 写法优化 尝试重新修复 开发中对于异常的常见处理方式 一层一层往上抛出异常&#xff0c;并且在最上层捕获异常&#xff0c;分为两种不同的处理方式。 例如&#xff0c;B站网页报错就是采取的第一种方式&#xff1a; 记录异常并…

linux 性能监控命令之dstat

1. dstat 系统默认为安装&#xff0c;直接安装阿里源后&#xff0c;yum install -y dstat安装即可&#xff0c;该命令整合了 vmstat &#xff0c; iostat 和 ifstat&#xff0c;我们先看下效果&#xff1a; 我们先看看具体参数&#xff1a; [rootk8s-master ~]# dstat --help …

C++STL初阶(1):string的使用及初阶原理

此文作为学习stl的笔记&#xff0c;许多普及、概念性的知识点将不再罗列&#xff08;如stl的发展、背景等&#xff09; 便于读者作为复习等方法了解。 0.STL简介&#xff08;笔记向&#xff09; STL不是祖师爷本贾尼实现的&#xff0c;是在惠普实验室中实现的。其作为一个数据结…

加密“发射台”:未来通信的新模式

随着区块链技术的飞速发展&#xff0c;加密“发射台”作为一种新兴的安全通信工具&#xff0c;正逐渐受到关注。本文将从专业角度深入探讨加密“发射台”的概念、原理、应用场景及其未来发展趋势&#xff0c;以期为读者提供有深度和逻辑性的思考。 一、加密“发射台”的概念与…

开源项目介绍-02 Aubio【1】环境配置和使用 @ Ubuntu + Pycharm + Python

前言&#xff1a; aubio 是一组算法和工具&#xff0c;用于标记和变换音乐和声音。它扫描或监听音频信号&#xff0c;并尝试识别音乐事件。例如&#xff0c;当鼓被击打时&#xff0c;它能检测到音符的频率&#xff0c;或者一个有节奏的旋律的节拍是多少。 aubio 的功能包括&a…

java 文件表创建及前后端使用

表结构task_file 前端具体到业务表单 <el-form-item label"任务附件" prop"taskAttachment"><el-upload ref"upload" accept".jpg, .png, .txt, .xlsx, .doc, .docx, .xls, .pdf, .zip, .rar":action"upload.url" …

C语言例题39、输入一个正整数,将其反方向逆序输出

#include <stdio.h>void main() {int x;int ge; //个位int result 0;printf("请输入一个正整数&#xff1a;");scanf("%d", &x);while (x > 0) {//解题原理ge x % 10;//每次分解取得个位的数字result result * 10 ge;//个十百千万顺序向左…

限购仅剩6地,透过房价地图看楼市行情!

同一天&#xff0c;两地取消限购&#xff01; 5月9日&#xff0c;继杭州取消限购之后&#xff0c;西安也宣布全面取消住房限购&#xff01; 现在&#xff0c;我们透过几幅楼市数据的分布地图&#xff0c;来看看5月的楼市行情&#xff01; 楼市限购&#xff0c;仅剩6地&#…

YOLOv9改进策略 :一种新颖的通用倒瓶颈(UIB)搜索块助力检测| 轻量化之王MobileNetV4

💡💡💡创新点:轻量化之王MobileNetV4 开源 | Top-1 精度 87%,手机推理速度 3.8ms,原地起飞! 最主要创新:引入了通用倒瓶颈(UIB)搜索块,这是一个统一且灵活的结构,它融合了倒瓶颈(IB)、ConvNext、前馈网络(FFN)以及一种新颖的额外深度可分(ExtraDW)变体技…

【iOS】事件传递与响应机制

文章目录 前言事件UIEvent一、事件传递遍历顺序 二、手势识别三、响应机制UIResponder&#xff08;响应者&#xff09;响应者链 四、相关应用扩大button点击范围穿透事件 总结 前言 提到响应者链与事件传递&#xff0c;如果看过其他人的博客&#xff0c;经常能看到这经典的三张…

《探索信息技术中心一体化系统架构:提升企业数字化转型的效率与能力》

在当今数字化时代&#xff0c;信息技术中心&#xff08;IT Center&#xff09;扮演着至关重要的角色&#xff0c;它不仅是企业的技术支撑&#xff0c;更是推动数字化转型的引擎。为了更好地应对日益复杂的业务需求和技术挑战&#xff0c;许多企业开始探索一体化系统架构&#x…

引用数据类型 栈内存 堆内存

let m { a: 10, b: 20 }; let n m; n.a 15; console.log(m.a) // 15 原因&#xff1a;基本数据类型存储在栈内存中&#xff0c;引用数据类型存储在堆内存中 &#xff0c;引用数据类型存储在堆内存中会在栈内存中创建一个指针&#xff0c;栈内存中的这个指针指向堆内存中的地…

英语学习笔记9——How are you today?

How are you today? 你好吗&#xff1f; 词汇 Vocabulary well adj. 好的 n. 井 fine adj. 美好的 两个方面&#xff1a;天气、身体。 搭配&#xff1a;a fine day 晴朗的一天    It’s a fine day today. 今天很晴朗。 good adj. 好的 口语偏多 搭配&#xff1a;Good jo…

基于光纤技术的新能源汽车电池安全监测--FOM²系统

为什么要进行动力电池包的温度监测&#xff1f; 新能源电动汽车的动力电池包的工作温度&#xff0c;不仅会影响电池包性能&#xff0c;而且直接关系到车辆安全。时有发生的新能源汽车电池包起火事件&#xff0c;对电池包、冷却系统以及电池管理系统&#xff08;BMS&#xff09…

初阶C语言(8) - 实用的调试技巧

1. 什么是bug? bug 是计算机领域专业术语&#xff0c;是计算机在硬件、软件、协议和系统安全策略上存在的缺陷&#xff0c;攻击者能够在未授权情况下访问的危害&#xff0c;世界最早的一批程序设计师之一&#xff0c;美国的葛丽丝霍波在调试设备时出现故障&#xff0c;拆开继电…

Java基础教程 - 6 方法

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 6 方法 方法也可以称之为…

算法day03

第一题 179. 查找总价格为目标值的两个商品 本题采用前后指针和单调性规律可解&#xff1b; 解题思路如下&#xff1a; 1、设置前后指针 2、前后指针所指的两数之和大于目标数&#xff0c;右指针左移&#xff1b; 前后指针所指的两数之和小于目标数&#xff0c;左指针右移&…

软件工程复习之软件定义时期

1.什么是软件&#xff1f; 答&#xff1a;软件是程序&#xff0c;数据和文档的集合。 程序是完成指定功能的计算机可执行的指令序列。 数据是程序进行信息处理的数据结构。 文档是开发&#xff0c;使用&#xff0c;维护的图文资料。 2.软件有何特点&#xff1f; 答&#…

2024年小沙弥小视频,轻松吸引中老年观众,上手简单,轻松月入了万

利用人工智能工具制作小沙弥主题的抖音内容&#xff0c;已成为网络赚钱的新途径。这个项目主要吸引中老年人群体&#xff0c;尤其是对智慧和人生哲理感兴趣的观众。小沙弥以其温馨且启发性的内容&#xff0c;引起中老年用户的共鸣&#xff0c;为他们提供心灵慰藉。 项 目 地 …
最新文章