TypeScript 常用知识

news/2024/4/24 8:44:22/文章来源:https://blog.csdn.net/WXY19990803/article/details/129262610

「 推荐一个学习 ts 基础的专栏,满满的干货:typeScript 」


1、为什么推荐使用 TypeScript

【】ts 是 js 的超集,包含 js 的所有元素

【】ts 通过对代码进行类型检查,可以帮助我们避免在编写 js 时经常遇到令人痛苦的错误

【】强大的类型系统,包括泛型

【】支持静态类型及类型检查

【】面向对象的语言,提供所有标准的 OOP 功能,如类、接口和模块

【】ts 代码可以按照ES5和ES6标准编译,以支持最新的浏览器

2、TS 中的类型有哪些

【】number、string、boolean、void、null、undefined、enum、any、class、interface、array、tuple(元组)、object、never

3、命名空间与模块的理解

【】命名空间:解决重名问题,命名空间定义了标识符的可见范围,一个标识符可在命名空间中定义,它在不同命名空间中的含义是互不相干的

【】任何包含顶级 import 或者 export 的文件都被当成一个模块。如果一个文件不带有顶级的 import 或者 export 声明,那么它的内容被视为全局可见的

【】区别:

  • 命名空间是位于全局命名空间下的一个普通的带有名字的 JavaScript 对象,使用起来十分容易。但就像其它的全局命名空间污染一样,它很难去识别组件之间的依赖关系,尤其是在大型的应用中
  • 像命名空间一样,模块可以包含代码和声明。 不同的是模块可以声明它的依赖
  • 在正常的TS项目开发过程中并不建议用命名空间,但通常在通过 d.ts 文件标记 js 库类型的时候使用命名空间,主要作用是给编译器编写代码的时候参考使用

4、什么是枚举

【】枚举是 TypeScipt 数据类型,它允许我们定义一组命名常量。它是相关值的集合,可以是数字值或字符串值

【】枚举类型分为:数字枚举、字符串枚举、异构枚举

【】枚举是可以合并的

5、什么是装饰器

【】装饰器是一种特殊类型的声明,它能过被附加到类声明,方法,属性或者参数上,可以修改类的行为

【】通俗的来说就是一个方法,可以注入到类,方法,属性参数上来扩展类,属性,方法,参数的功能

【】装饰器的分类: 类装饰器、属性装饰器、方法装饰器、参数装饰器

6、TS 中的类是什么

【】类表示一组相关对象的共享行为和属性

【】类之间可以通过 extend 实现继承,被继承类称为基类,继承的类称为派生类

【】一个类包括构造器、属性、方法。拥有四个特性:继承、封装、多态、抽象

7、TS 中的泛型是什么

【】 在 ts 中,定义函数,接口或者类的时候,不预先定义好具体的类型,而在使用的时候在指定类型的一种特性

【】泛型约束:<T extends xx> 的方式实现 约束泛型


【】索引类型 keyof T 把传入的对象的属性类型取出生成一个联合类型


8、const 和 readonly 的区别是什么

【】const用于变量,readonly用于属性

【】const在运行时检查,readonly在编译时检查

【】使用const变量保存的数组,可以使用push,pop等方法。但是如果使用Readonly Array声明的数组不能使用push,pop等方法

9、Omit 类型 和 Pick 类型对比

【】Omit 以一个类型为基础支持剔除某些属性,然后返回一个新类型

	Omit<Type, Keys>

【】Pick 以一个类型为基础支持选择某些属性,然后返回一个新类型

	interface Todo {title: stringdescription: stringcompleted: booleancreatedAt: number}type Ex = "title" | "description"type TodoPreview = Omit<Todo, "description">type TodoPreview1 = Pick<Todo, Ex>

10、ts 中高级类型有哪些

【】交叉类型、联合类型、类型别名、类型索引、类型约束、映射类型、条件类型

【】映射类型:通过 in 关键字做类型的映射,遍历已有接口的 key 或者是遍历联合类型

	type Readonly<T> = {//P in keyof T 等同于 p in 'a' | 'b',相当于执行了一次 forEach 的逻辑,遍历 'a' | 'b'readonly [P in keyof T]: T[P];};interface Obj {a: stringb: string}type ReadOnlyObj = Readonly<Obj>

【】条件类型:条件类型的语法规则和三元表达式一致,经常用于一些类型不确定的情况

	//如果 T 是 U 的子集,就是类型 X,否则为类型 YT extends U ? X : Y

11、interface 和 type 区别

【】相同点:

  • 都可以描述对象或者函数
  • 都允许扩展(extends)

【】不同点:

  • 类型别名可以为任何类型引入名称,例如基本类型,联合类型等
  • 类型别名不支持继承
  • 类型别名不会创建一个类型的名字
  • 类型别名无法被实现implements,而接口可以被派生类实现
  • 类型别名重名会抛出错误,接口重名是会产生合并

12、interface给 Function/Array/Class 做声明

	interface Say {(name: string): void;}let say: Say = (name: string): void => {};interface NumberArray {[index: number]: number;}let fibonacci: NumberArray = [1, 2, 3, 4];interface Person {name: string;sayHi(name: string): string;}

13、获取枚举类型的 key

	enum Str {A, B, C}type strUnion = keyof typeof str; // 'A' | 'B' | 'C'

14、declare, declare global是什么

【】declare是用来定义全局变量、全局函数、全局命名空间、js modules、class等

【】declare global 为全局对象 window 增加的新属性

	declare global {interface Window {csrf: string;}}

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

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

相关文章

云端IDE系列教程7:解决 WeTTY 在 Ubuntu 非 root 用户不能运行的问题

原文作者&#xff1a;行云创新技术总监 邓冰寒 概述 上一期在使用官方容器镜像快速成功地在 TitanIDE 运行起来了 WeTTY&#xff0c;但是不适合开发人员使用&#xff0c;而我自己编译构建出来的容器镜像无法直接运行指定的应用&#xff08;/bin/bash 或 /bin/zsh&#xff09;&…

GO中sync 包的 RWMutex 读写互斥锁

文章目录背景RWMutex 简介代码验证多个协程请求读锁 RLock() 和 RLock()读写交错 RLock() 和 Lock()写入的时候读取读取的时候写入请求多个写Lock() 和 Lock()背景 Mutex 互斥锁是严格锁定读和写&#xff0c;如果我们需要单独对读或者写添加锁需要使用 sync包的RWMutex 针对读…

PHP使用chilkat入门教程

前言&#xff1a; 我们需要先确认自己的版本&#xff0c;在PHP中&#xff0c;可以利用phpinfo()函数来查看php是ts版本还是nts版本&#xff0c;该方法可以展示出当前phpinfo信息&#xff0c;若“Thread Safety”项的信息是“enabled”&#xff0c;一般来说就表示ts版本&#xf…

备战英语6级——记录复习进度

开始记录—— 学习&#xff1a;如何记录笔记&#xff1f; 1&#xff1a;首先我认为&#xff1a;电脑打字比较适合我&#xff01; 2&#xff1a;先记笔记&#xff0c;再“填笔记”&#xff01; 记笔记就是一个框架&#xff0c;记录一个大概的东西。后面需要在笔记中&#xff0…

实例10:四足机器人运动学逆解可视化与实践

实例10&#xff1a; 四足机器人运动学逆解单腿可视化 实验目的 了解逆运动学的有无解、有无多解情况。了解运动学逆解的求解。熟悉逆运动学中求解的几何法和代数法。熟悉单腿舵机的简单校准。掌握可视化逆向运动学计算结果的方法。 实验要求 拼装一条mini pupper的腿部。运…

Qt 事件机制

【1】事件 事件是可以被控件识别的操作。如按下确定按钮、选择某个单选按钮或复选框。 每种控件有自己可识别的事件&#xff0c;如窗体的加载、单击、双击等事件&#xff0c;编辑框&#xff08;文本框&#xff09;的文本改变事件等等。 事件就是用户对窗口上各种组件的操作。…

LibAFL的安装及基本使用

本教程安装LibAFL使用的是Ubuntu 22.04 操作系统 1. 安装 1.1 Rust 安装 Rust的安装&#xff0c;参照Rust官网&#xff1a;https://www.rust-lang.org/tools/install curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh1.2 LLVM安装 直接apt安装&#xff0c;安…

表格形式的Sarsa与Q_learning算法

环境如下&#xff1a; 这是一个简单的环境&#xff0c;绿色方块代表终点&#xff0c;白色方块代表可行点&#xff0c;灰色方块代表陷阱 用Sarsa算法和Q_learning算法训练得到value表格 代码如下&#xff1a; (jupyter notebook上的代码&#xff0c;所以顺序看起来有点儿奇怪) …

Java8 新特性强大的Stream API

一、Stream API 说明 Java8中有两大最为重要的改变。第一个是 Lambda 表达式&#xff1b;另外一个则是 Stream API。 Stream API ( java.util.stream) 把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充&#xff0c;因为Stream API可以极大提供Ja…

【博学谷学习记录】超强总结,用心分享丨人工智能 特征工程 特征变换 分箱学习总结

目录概念分箱的作用等频分箱等距分箱*卡方分箱公式例子概念 特征构造的过程中&#xff0c;对特征做分箱处理时必不可少的过程分箱就是将连续变量离散化&#xff0c;合并成较少的状态 分箱的作用 离散特征的增加和减少都很容易&#xff0c;易于模型的快速迭代&#xff1b;稀疏…

基于自定义训练函数的BP神经网络回归分析

目录 背影 BP神经网络的原理 BP神经网络的定义 BP神经网络的神经元 BP神经网络的激活函数 BP神经网络的传递函数 基于自定义训练函数的BP神经网络回归分析 背影 BP神经网络是一种成熟的神经网络&#xff0c;拥有很多训练函数&#xff0c;传递函数&#xff0c;激活函数&#x…

数学小课堂:无穷小(用动态和极限的眼光看世界)

文章目录 引言I 极限1.1 柯西对极限的认知1.2 极限准确的定义1.3 数列极限的定义1.4 函数极限的定义1.5 无穷小(特殊的极限)1.6 定量和逆向思维1.7 认知升级的过程引言 身处于渐变世界的人类,难以理解瞬间突变。 老师的作用,就是用大白话,把数学语言所写的知识,翻译成大…

腾讯安全与锐捷网络战略合作,威胁情报能力“被集成”

2月28日&#xff0c;腾讯安全和锐捷网络在北京联合举办“威胁情报”战略合作发布会。双方发布了一款集成了腾讯安全威胁情报的新一代防火墙&#xff0c;并举办战略合作签约仪式。会上&#xff0c;锐捷网络安全产品事业部总经理项小升、腾讯安全总经理陈龙代表双方签署战略合作协…

Python可视化界面编程入门

Python可视化界面编程入门具体实现代码如所示&#xff1a; &#xff08;1&#xff09;普通可视化界面编程代码入门&#xff1a; import sys from PyQt5.QtWidgets import QWidget,QApplication #导入两个类来进行程序界面编程if __name__"__main__":#创建一个Appl…

k8s学习之路 | Day17 k8s 工作负载

文章目录工作负载的定义工作负载资源分类工作负载的定义 官方参考链接&#xff1a;https://kubernetes.io/docs/concepts/workloads/ A workload is an application running on Kubernetes. Whether your workload is a single component or several that work together, on K…

《C++ Primer Plus》(第6版)第6章编程练习

《C Primer Plus》&#xff08;第6版&#xff09;第6章编程练习《C Primer Plus》&#xff08;第6版&#xff09;第6章编程练习1. 大小写转换2. 平均值3. 菜单4. 成员5. 收入所得税6. 捐款7. 统计单词8. 统计文件字符数9. 重写编程练习6《C Primer Plus》&#xff08;第6版&…

创建对象的方式和对属性的操作

javaScript支持多种编程范式&#xff0c;包括函数式编程和面向对象编程&#xff0c;javaScript的对象被设计成一组属性的无序集合&#xff0c;由key和value组成。 创建对象的两种方式 早期使用创建对象方式最多的是使用Object类&#xff0c;使用new关键字来创建一个对象&…

docker-compose安装kafka和php简单测试

docker-compose.yml内容&#xff1a; version: 3.1 services: zookeeper: container_name: zookeeper image: zookeeper:3.6 ports: - 2181:2181 kafka: image: wurstmeister/kafka container_name: kafka depends_on: - zookeeper …

解决Spring Data Jpa 实体类自动创建数据库表失败问题

先说一下我遇到的这个问题&#xff0c;首先我是通过maven创建了一个spring boot的工程&#xff0c;引入了Spring data jpa&#xff0c;结果实体类创建好之后&#xff0c;运行工程却没有在数据库中自动创建数据表。 找了半天发现是一个配置的问题! hibernate.ddl-auto节点的配…

【Python实战】激情澎湃,2023极品劲爆舞曲震撼全场,爬虫一键采集DJ大串烧,一曲醉人女声DJ舞曲,人人都听醉~(排行榜采集,妙啊~)

导语 哈喽&#xff01;大家好。我是木木子吖~今天给大家带来爬虫的内容哈。 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 今天教大家Python爬虫实战一键采集大家喜欢的DJ舞曲哦&#xff01; …