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

第Ⅰ章-Ⅰ 了解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 关键字来定义类型别名或组合类型,以更灵活地描述数据。
//定义了一个名为UserId的联合类型 
type UserId = number | string;

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

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

面向对象特性

  • 类(Class):TypeScript 支持面向对象的类,包括属性、方法、构造函数、继承等。
    javavscript 写法
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

class Animal {
    constructor(public name: string) {}
    speak() {
        console.log(`${this.name} makes a sound.`);
    }
}
  • 接口(Interface):接口定义了一组属性和方法,可以用于描述对象的形状
interface Person {
    name: string;
    age: number;
    speak(): void;
}

  • 修饰符:TypeScript 支持 public、private、protected 等访问修饰符,用于控制类属性和方法的可见性。
  • 抽象类:抽象类可以用于定义基础类,并强制子类实现特定的方法。
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 继承类

class Dog extends Animal {
    speak() {
        console.log(`${this.name} barks.`);
    }
}

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

函数特性

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

模块与命名空间

  • 模块:TypeScript 支持 ES6 模块语法,可以使用 import 和 export 进行模块化开发。
// 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 支持命名空间,可以用于组织代码。
namespace Utils {
    export function add(a: number, b: number): number {
        return a + b;
    }
}

console.log(Utils.add(1, 2)); // 输出 3

其他特性

  • readonly 属性:可以用于定义只读属性,确保对象的某些属性不可修改。
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 支持装饰器,用于为类、方法、属性等添加元数据或行为。
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 {
    @Log
    greet(name: string) {
        console.log(`Hello, ${name}`);
    }
}

const ex = new Example();
ex.greet("World");
  • 类型守卫:可以使用类型守卫来确保在运行时操作特定类型的数据。
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.mfbz.cn/a/604160.html

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

相关文章

【Qt 开发基础体系】Qt信号与槽机制

文章目录 1.Qt 信号与槽机制原理&#xff08;Signal & Slot&#xff09;2. QObject 类 connect 的介绍3. 信号与槽机制连接方式4. 信号和槽机制优势及其效率&#xff1a;3. 信号与槽机制应用 1.Qt 信号与槽机制原理&#xff08;Signal & Slot&#xff09; &#x1f42…

通过AOP实现项目中业务服务降级功能

最近项目中需要增强系统的可靠性&#xff0c;比如某远程服务宕机或者网络抖动引起服务不可用&#xff0c;需要从本地或者其它地方获取业务数据&#xff0c;保证业务的连续稳定性等等。这里简单记录下业务实现&#xff0c;主要我们项目中调用远程接口失败时&#xff0c;需要从本…

《武林秘籍》——闪侠惠递如何让消费者寄快递更安心!

现如今&#xff0c;网上下单寄快递的便利性让众多人享受到了电商物流飞速发展带来的红利性。今天小编直接介绍一款寄快递特别省钱的利器&#xff0c;就是利用闪侠惠递来寄快递。闪侠惠递寄快递&#xff0c;真正的实现了便宜寄快递发物流的便捷性&#xff0c;开创了低价发快递的…

【汇总】虚拟机网络不通(Xshell无法连接虚拟机)排查方法

搜索关键字关键字关键字&#xff1a;虚拟机虚拟机虚拟机连接失败、虚拟机无法连接、Xshell连接失败、ping baidu.com失败、静态IP设置 Kali、CentOS、远程连接 描述&#xff1a;物理机无法连接虚拟机&#xff1b;虚拟机无法访问百度&#xff0c;虚拟机无法访问baidu.com 虚拟机…

Logstash分析MySQL慢查询日志实践

删除匹配到的行&#xff0c;当前行信息不记录到message中

可视化面板布局适配屏幕-基于 flexible.js + rem 智能大屏适配

可视化面板布局适配屏幕-基于 flexible.js rem 智能大屏适配 VScode 安装cssrem插件引入flexible.js在之后的开发都使用rem为单位&#xff0c;安装cssrem插件就是为了快捷将px转为rem我们的设计稿是1920px&#xff0c;设置最小宽度为1024px&#xff0c;最后&#xff0c;我们可…

JavaScript异步编程——05-回调函数

我们在前面的文章《JavaScript 基础&#xff1a;异步编程/单线程和异步》中讲过&#xff0c;Javascript 是⼀⻔单线程语⾔。早期我们解决异步场景时&#xff0c;⼤部分情况都是通过回调函数来进⾏。 &#xff08;如果你还不了解单线程和异步的概念&#xff0c;可以先去回顾上一…

SlowFast报错:ValueError: too many values to unpack (expected 4)

SlowFast报错&#xff1a;ValueError: too many values to unpack (expected 4) 报错细节 File "/home/user/yuanjinmin/SlowFast/tools/visualization.py", line 81, in run_visualizationfor inputs, labels, _, meta in tqdm.tqdm(vis_loader): ValueError: too …

流星烛台如何交易?Anzo Capital昂首资本3步盈利收场

各位投资者通过之前的文章可以准确的辨认出什么是流星烛台了&#xff0c;但是各位投资者一旦遇到流星图案知道怎么交易吗?其实一点都不困难&#xff0c;只要掌握住流星图案的交易真棒&#xff0c;Anzo Capital昂首资本3步就可以盈利收场。 首先&#xff0c;投资者需要确定图…

文件下载出现 IOExpcetion: closed

异常原因截图 : 异常代码位置 : 出现的原因是 使用 try-with-resources, downloadFile 方法执行完毕, 文件流被关闭了...导致前面读取文件字节, 异常提示已经关闭... try (Response response OkHttpUtils.getInstance().client.newCall(new Request.Builder().url(fileUrl)…

Yolov8实现loopy视频识别

1、前言 loopy是一个非常可爱的动漫角色&#xff08;可爱粉色淀粉肠&#xff09;&#xff0c;闲来无事&#xff0c;打算用yolov8训练一个模型对loopy进行识别。 2、准备工作 先在网络上搜寻很多loopy的图片&#xff0c;然后将图片导入Lablel Studio软件进行标注&#xff0c;并…

第1章.STM32单片机入门知识介绍

目录 0. 《STM32单片机自学教程》专栏 1.1 嵌入式系统简介 1.1.1 什么是嵌入式系统 1.1.2 嵌入式系统的特点 1.1.3 嵌入式系统的应用领域 1.2 单片机基本概念 1.3 ARM简介 1.3.1 ARM公司简介 1.3.2 ARM处理器简介 1.4 STM32简介 1.4.1 基于Cortex内核的MCU 1.4.…

springMVC入门学习

目录 1、 什么是springmvc 2、springmvc工作流程 3、 springmvc快速入门&#xff08;XML版本&#xff09; 4、加载自定义目录下的springmvc.xml配置文件 5、 解析器InternalResourceViewResolver 6、 映射器BeanNameUrlHandlerMapping 7、 适配器SimpleControllerHandle…

【算法-程序的灵魂#谭浩强配套】(适合专升本、考研)

无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 完整资料如下&#xff1a; 1.一个程序主要包括以下两方面信息&#xff1a;程…

React:Router-1.BrowserRouter组件式

使用步骤 安装 react-router-dom 依赖 $ npm install react-router-dom6导入 BrowserRouter, Link, Routes, Route 对象 import {BrowserRouter, Link, Routes, Route} from react-router-dom;3.BrowserRouter&#xff1a;history模式路由&#xff1b; HashRouter&#xff1…

Flask gevent启动报错UnicodeDecodeError

文章目录 环境代码报错Track解决思路 环境 acondana 24.1.2python 3.7.13 32bitflask 2.2.3gevent 21.8.0 代码 port 7236 logging.basicConfig(levellogging.INFO, # 控制台打印的日志级别filename./logs/app.log, # 将日志写入log_new.log文件中filemodea, # 模式&…

python笔记:dataclass

1 引子&#xff1a;其他类似实现方法的局限性 假设我们现在需要实现这样的内容&#xff1a; nameChinaarea960population140967 1.1 tuple/list country1_tuple(China,960,140967) country1_tuple[0] #China 缺点&#xff1a;需要记住各个属性是list/tuple第几位的属性&am…

DEV--C++小游戏(吃星星(0.2))

目录 吃星星&#xff08;0.2&#xff09; 简介 分部代码 头文件&#xff08;增&#xff09; 命名空间变量&#xff08;增&#xff09; 副函数&#xff08;新&#xff0c;增&#xff09; 清屏函数 打印地图函数&#xff08;增&#xff09; 移动函数 选择颜色&#xff…

LuaJIT源码分析(三)字符串

LuaJIT源码分析&#xff08;三&#xff09;字符串 要表示一个字符串&#xff0c;核心就是需要知道字符串的长度&#xff0c;以及存放字符串具体数据的地址。lua的字符串是内化不可变的&#xff0c;也就是lua字符串变量存放的不是字符串的拷贝&#xff0c;而是字符串的引用。那么…

OpenNJet产品体验-手把手在Ubuntu20.04系统从零部署到应用OpenNJet

目录 一、引言 二、OpenNJet产品安装 2.1下载OpenNJet安装包 2.2安装OpenNJet V2.0.1 ​2.3快速启动并测试OpenNJet 三、OpenNJet产品应用体验 3.1配置OpenNJet 3.2 部署 Web 应用程序 3.3启动 NJet 3.4访问 Web 应用程序 四、总结 一、引言 OpenNJet应用引擎是高性…
最新文章