TypeScript学习大纲

TypeScript 是 JavaScript 的一个超集,它为 JavaScript 添加了静态类型系统。以下是一些必须了解的 TypeScript 基本知识点和特性:

  1. 基本类型:
    TypeScript 支持与 JavaScript 相同的基本类型,并提供了一些额外的类型选项。

    let isDone: boolean = false;
    let decimal: number = 6;
    let color: string = "blue";
    
  2. 数组:
    可以在元素类型后面直接跟上 [],形成元素类型的数组。

    let list: number[] = [1, 2, 3];
    
  3. 枚举:
    枚举类型是 TypeScript 为 JavaScript 提供了一个方便的添加命名数值集合的方法。

    enum Color {Red, Green, Blue}
    let c: Color = Color.Green;
    
  4. 任意值 (Any):
    当你不希望类型检查器检查某些值时,可以使用 any 类型。

    let notSure: any = 4;
    notSure = "maybe a string instead";
    
  5. 空值 (Void):
    用于表示没有任何类型,通常用于表示没有返回值的函数的返回类型。

    function warnUser(): void {console.log("This is my warning message");
    }
    
  6. 接口 (Interfaces):
    接口是代码或第三方代码的契约,或者是在你的代码或第三方代码之间的契约。

    interface LabelledValue {label: string;
    }
    function printLabel(labelledObj: LabelledValue) {console.log(labelledObj.label);
    }
    
  7. 类 (Classes):
    TypeScript 的类只是 JavaScript 的类的一个简单的语法糖。

    class Greeter {greeting: string;constructor(message: string) {this.greeting = message;}greet() {return "Hello, " + this.greeting;}
    }
    
  8. 模块 (Modules):
    TypeScript 与 ECMAScript 2015 一样,任何包含顶级 import 或 export 的文件都被视为模块。

    // module.ts
    export function hello() {return "Hello!";
    }// main.ts
    import { hello } from './module';
    console.log(hello());
    
  9. 泛型 (Generics):
    泛型是创建可重用组件的一种方法,一个组件可以支持多种类型的数据。

    function identity<T>(arg: T): T {return arg;
    }
    
  10. 装饰器 (Decorators):
    装饰器为您编写类声明时的修饰的声明提供了一种方式。

    function sealed(constructor: Function) {Object.seal(constructor);Object.seal(constructor.prototype);
    }@sealed
    class Greeter {// ...
    }
    
  11. 命名空间 (Namespaces):
    命名空间是将代码包裹在一个全局名称下的一种方式,以防止与在其他地方编写的代码冲突。

    namespace MyNamespace {export interface SomeInterface {// ...}export class SomeClass {// ...}
    }
    
  12. 类型断言:
    类型断言好比其它语言里的类型转换,但不进行特殊的数据检查和解构。它没有运行时的影响,只是在编译阶段起作用。

    let someValue: any = "this is a string";
    let strLength: number = (<string>someValue).length;
    
  13. 映射类型 (Mapped Types)
    TypeScript 允许你从旧的类型中创建新的类型,例如将所有的属性变为可选或只读。

    type Readonly<T> = {readonly [P in keyof T]: T[P];
    };type Partial<T> = {[P in keyof T]?: T[P];
    };
    
  14. 条件类型 (Conditional Types)
    通过条件表达式对类型进行选择。

    type TypeName<T> =T extends string ? "string" :T extends number ? "number" :"object";
    type T1 = TypeName<string>;  // "string"
    type T2 = TypeName<number>;  // "number"
    
  15. 索引类型 (Indexed Types)
    使用索引类型查询和索引类型访问操作来实现“从对象中选择属性”的模式。

    function pluck<T, K extends keyof T>(o: T, names: K[]): T[K][] {return names.map(n => o[n]);
    }
    
  16. 模板字面量类型 (Template Literal Types)
    允许你在类型级别使用字符串模板字面量语法。

    type World = "world";
    type Greeting = `hello ${World}`;
    
  17. 递归类型 (Recursive Types)
    类型可以引用它们自己,形成递归或嵌套类型。

    type JsonValue = string | number | boolean | null | JsonObject | JsonArray;
    interface JsonObject { [key: string]: JsonValue; }
    interface JsonArray extends Array<JsonValue> {}
    
  18. 类型断言和类型保护:
    自定义类型保护允许你明确地影响类型检查的结果。

    function isString(test: any): test is string {return typeof test === "string";
    }
    
  19. 类型推断 (Type Inference)
    TypeScript 尝试根据代码自动确定表达式的类型。

    let x = 3;  // `x` has the type `number`
    
  20. 声明合并 (Declaration Merging)
    TypeScript 允许声明合并,以便用户可以将类、接口、模块等拆分成多个文件。

    interface Cloner {clone(animal: Animal): Animal;
    }interface Cloner {clone(animal: Sheep): Sheep;
    }
    
  21. 全局声明 (Global Declarations)
    你可以在全局范围内声明变量、类型、函数等,以便在项目中共享。

    declare var jQuery: (selector: string) => any;
    
  22. 类型和命名空间导入/导出:
    使用 import/export 语法来组织和共享代码。

    import { SomeType } from './some-module';
    export { SomeType };
    
  23. 装饰器工厂:
    创建和组合装饰器。

    function loggable(target: Function) {return class extends target {log() {console.log('Logging...');}}
    }@loggable
    class MyClass {// ...
    }
    
  24. 使用 tsconfig.json:
    使用 tsconfig.json 文件来配置 TypeScript 项目的编译选项和包含的文件。

  25. 使用第三方库的类型定义:
    通过 DefinitelyTyped 项目和 @types 作用域包来获取和使用第三方库的类型定义。

这些基本知识点和特性为您提供了使用 TypeScript 编写强类型和面向对象的 JavaScript 代码的基础。TypeScript 具有很多其他高级特性和配置选项,可以通过阅读 TypeScript 官方手册 或其他相关资源来进一步学习和掌握。

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

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

相关文章

怎么加密U盘文件?U盘文件加密软件哪个好?

当U盘中储存重要数据时&#xff0c;我们需要保护U盘文件安全&#xff0c;避免数据泄露。那么&#xff0c;怎么加密U盘文件呢&#xff1f;U盘文件加密软件哪个好呢&#xff1f; ​U盘数据怎么避免泄露&#xff1f; 想要避免U盘数据泄露&#xff0c;最佳的方法就是对U盘文件进行…

彻底弄懂js函数柯里化

彻底弄懂js函数柯里化 1、前言2、什么是柯里化3、实现原理4、应用场景4.1 参数复用4.2 遍历数组 1、前言 函数柯里化(Currying)在JavaScript中总感觉属于一种不温不火的存在&#xff0c;甚至有些开发者在提起柯里化时&#xff0c;竟然会有点生疏不懂。其实不然&#xff0c;对于…

关于埋点上报

一、埋点上报结构包含哪些&#xff1f; 埋点上报结构一般包含以下信息&#xff1a; 事件名称&#xff1a;标识上报的是哪个事件&#xff0c;例如“注册成功”或“点击按钮”等。事件发生时间&#xff1a;记录事件发生的时间戳。用户ID&#xff1a;标识事件所属的用户。设备信息…

Vue实现Hello World

<div id"aa"> <p>{{h}}</p> </div> <script src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js"></script> <script> const hello new Vue({ el:#aa, data:{ h : Hello World } }) </script>

Konva基本处理流程和相关架构设计

前言 canvas是使用JavaScript基于上下文对象进行2D图形的绘制的HTML元素&#xff0c;通常用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。基于Canvas之上&#xff0c;诞生了例如 PIXI、ZRender、Fabric、Konva等 Canvas渲染引擎&#xff0c;兼顾易用的同时…

TCP协议与UDP协议

TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;是两种常见的互联网传输协议&#xff0c;它们在数据传输方面有一些重要的区别&#xff1a; 连接性&#xff1a;TCP是面向连接的协议&#xff0c;而UDP是无连接的协议。这意味着在使用TCP进…

基于微信小程序的电影院订票系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言运行环境说明用户微信小程序端的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考论文参考源码获取 前言 &#x1f497;博主介绍&…

ASCII码-对照表

ASCII 1> ASCII 控制字符2> ASCII 显示字符3> 常用ASCII码3.1> 【CR】\r 回车符3.2> 【LF】\n 换行符3.3> 不同操作系统&#xff0c;文件中换行 1> ASCII 控制字符 2> ASCII 显示字符 ASCII&#xff08;American Standard Code for Information Interc…

【计算机网络】IP协议

目录 前言 IP协议 基本概念 IP协议格式 分片 16位标识 3位标志与13位片偏移 分片流程 网段划分 网络号和主机号 DHCP协议 CIDR划分方案 特殊的ip地址 ip地址数量限制 私有ip地址与公网ip地址 路由转发 前言 我们前面讲了HTTP/HTTPS协议和TCP/…

ElementUI - 主页面--动态树右侧内容管理

一.左侧动态树 1.定义组件 ①样式&数据处理 <template><el-menu class"el-menu-vertical-demo" background-color"#334157"text-color"#fff" active-text-color"#ffd04b" :collapse"collapsed" router :def…

centos7通过docker搭建nginx+php环境

以下环境都是基于centos7.9完成。 1.安装docker yum install docker-ce 说明&#xff1a;这一步&#xff0c;由于centos软件仓库没有收纳docker&#xff0c;需要自己去官网爬文档安装。 安装完成之后&#xff0c;就是启动docker服务以及添加到开机启动。 systemctl enable do…

相乘(蓝桥杯)

相乘 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小蓝发现&#xff0c;他将 1 至 1000000007 之间的不同的数与 2021 相乘后再求除以 1000000007 的余数&#xff0c;会得到不同的数。 小蓝想知道&#xff0c;能不能在 1 …

WordPress主题开发( 七)之—— 模版文件继承规则

WordPress主题开发&#xff08; 七&#xff09;之—— 模版文件继承规则 概述模板文件层次结构示例可视化概述层次结构详细信息主页显示首页显示单文章页面单页分类目录标签自定义分类自定义文章类型作者显示日期搜索结果404&#xff08;未找到&#xff09;附件嵌入功能非ASCII…

Spring Cloud Alibaba快速整合OpenFeign

文章目录 spring cloud alibaba 整合OpenFeign整合流程1.导入依赖2. 编写调用接口2.1 service&#xff08;这里写的是clients&#xff09;2.2 controller 3.设置其最大链接时间3.1 配置文件3.2 client3.3 接口3.4 被访问的controller spring cloud alibaba 整合OpenFeign Fore…

如何评估商城源码的安全性和稳定性?

评估商城源码的安全性和稳定性是选择合适的商城源码的关键一步。以下是一些方法和指标&#xff0c;可用于评估商城源码的安全性和稳定性。希望对大家有所帮助(仅供参考)。 1、源码质量 商城源码的质量是评估其安全性和稳定性的重要指标之一。我们技术可以检查源码的编码规范、…

【算法新题】TJOI2017-异或和

题目内容 原题链接 给定一个长度为 n n n 的整数数组 a a a &#xff0c;问所有子数组和的异或和是多少。 数据范围 1 ≤ n ≤ 1 0 5 1\leq n\leq 10^5 1≤n≤105 ∑ a i ≤ 1 0 6 \sum a_i\leq 10^6 ∑ai​≤106 题解 基本思路 本题是 ARC092D - Two Sequences 的同类型…

深拷贝与浅拷贝

首先深拷贝与浅拷贝 只针对Object 和Array这样的引用数据类型 所以基本数据类型不用考虑了 等号赋值 基本数据类型 对于基本数据类型&#xff0c;就会创建一个新的变量&#xff0c;并将原变量的值复制给新变量。 这是基于变量是存储在栈内存中的特点。简单来说&#xff0c;等…

分享三个国内可用的免费GPT-AI网站

AIchatOS国内的不需要梯子 AItianhu同上 国内百度的文心一言一样非常优秀

订阅《复现SCI文章系列教程》

写在前面 《小杜生信笔记》准备开启新的订阅专栏**《复现期刊文章系列教程》&#xff0c;本专栏小杜会寻找一些自己感兴趣的文章进行复现&#xff08;不说百分之百的复现&#xff0c;但是也会百分之八十进行复现&#xff09;。本期刊的教程代码会全部进行公开&#xff08;通过订…

数据结构:顺序表

SeqList.h #pragma once #include<stdio.h> #include<assert.h> #include<stdlib.h>typedef int SLDataType; //#define NULL 0typedef struct SeqList {SLDataType* a;int size;//顺序表中存储的有效元素的个数int capacity;//空间的大小 }SL;void SLInit(…