TS学习笔记(数据类型、高级类型、接口、类、继承、重写、修饰符、抽象类)

TS学习笔记(数据类型、高级类型、接口、类、继承、重写、修饰符、抽象类)

1、谈谈你对ts的理解以及与js的区别

是什么?

ts是js的超集,支持es6语法,支持面向对象编程的概念 如:类、接口、继承、泛型

特性:

–类型批注 和 编译时的类型检查;
–类型推断 例如
–类型檫除 在编译过程中批注的内容、接口会在运行时檫除,不会保留在编译中
–接口
–枚举
–mixin
–泛型编程
–名字空间
–元组 在里面定义不同的类型,相较于js数组而言

类型批注

如number、bool、string、any

类型推断

let str = ‘hello’ --类型推断为string类型

接口

用来描述对象的类型
数据类型:number、null、string
如:
interface person{
name:string
age:10
}
上述接口定义好之后,下面使用定义Person对象的时候,类型要对应,如:
let Person = {
name:“wangjiaer”,
age;18,
}

区别:

–ts是js的超集,扩展了js的语法
–可以写js,只对ts代码进行编译
–文件后缀.ts、.jsx、.dts而js得后缀就是.js
–编译的时候会将ts转为js文件

2、ts的数据类型

是什么

–boolean
–number
–string
–array
与js有区别,例定义的是string的类型arr,则里面的数据都得是string
–tuple 元组
类型不一致,则用元组:2点:已知数量、已知类型
如 let tupp:[number,string,boolean]
–enum枚举
对js类型的一个补充:如数字枚举、字符串枚举、异构枚举(很少用,用的话看着会比较奇怪,包含的类型各种类型)
如:
enum Color{
Red,
Green,
Blue
}
let c:Color = Color.Red 需要是枚举里面的类型
–any
任意的类型,可以被任意类型的数据进行赋值
–null undefined
默认都是所有类型的子类型,可以把他们赋值给string,number这些
–void类型
空类型,表示一般用在方法上,表示方法没有任何的返回值
如:function hello():void{
console.log(“hello”)
}
–never 类型 处于最低的一个层级的类型
任何类型的子类型,代表不会出现的值,他是一个最底层的类型
只有never类型的值可以赋值给never,一般死循环,异常抛出的场景,如:
let a:never
a = 123 //报错
a = (()=>{
throw new Error(“wrong”)
})()//正确用法
–object类型

总结:

–基本类型:较js新增void、any、enum、never
–引用类型

3、js中高级类型的理解?有哪些?

是什么?

高级类型

–交叉类型
& 将多个类型何合并为一个类型,并的概念 如T&U
function extend<T,U>(first:T,sencond:U):T&U{
let res:<T&U> = {},
for(let key in first){
res[key] = first[key]
}
for(let key in sencond){
if(!res.hasOwnProperty(key)){
res[key] = sencond[key]
}
}
return res;//返回包含first何sencond里面所有的类型
}
–联合类型
逻辑上的 或,表示多个类型中的任意一个 T|U
number|string|boolean 不能共存 三者中起其中一个:如
function formatC(command:string[]|string){
let line = ‘’
if(typeof command === '‘string){line = command.trim()}else{line = command.join(’ ').trim()}
}
–类型别名
type关键字 相当于给类型起一个新的名字
type SomeName = somexxx
type some = boolean | string
const b:some = true//ok
const c:some = ‘ok’//ok
const d:some = 333//报错
–类型索引
keyof 类似 Object.keys 获取所有类型的一个联合类型,例如
interface Button {
type:string,
text:string
}
type ButtonKeys = keyof Button //返回接口里面的key的是联合类型 “type”|“text”
–类型约束
extends关键字,在可控范围内对类型进行约束
type BaseType = string|number|boolean
function copy(arg:T):T{return arg}//对传入的参数进行约束 只能是string、number、boolean联合类型中的任意一个
copy({})//报错
copy(“111”)//ok
类型约束一般和类型索引一起使用,如:
function getValue<T,K extends keyof T>(obj:T,key:K){}//约束key必须是T中的索引
–映射类型
in 关键字 编译业务接口的key或者遍历联合类型
type Readonly = {
readonly [p in keyof T]:T[p]//对T遍历,将类型全都变成只读类型
}
interface obj{
a:string,
b:syring
}
type ReadOnlyObj = Readonly
//实际就变成了:
{
readonly a:string
readonly b:string
}
–条件类型
三元表达式类似
T extends U?X:Y

4、ts中接口的理解?应用场景?

是什么?

接口是抽象方法的一个声明,是一个方法特征的一个集合
关键字 interface

interface {
name:string;
age?:number;//可选的,可传可不传
readonly isMale:boolean;
say:(words:string) =>string //方法
}

//接口可以继承
interface Father{
color:string
}
interface Mother{
height:number
}
interface Son extends Father,Monther{
name:string,
age:number
}
//son就拥有了Mother和Father的所有东西

应用场景:

更多是对对象的一个约束,入场传入的是一个对象,对这个对象进行约束处理,第三方根据该接口入参进行正确传参
例如:
interface IUser{
name:string
age:number
}
const getUserInfo = (user:Iuser):string =>{
return name:${user.name},age:${user.age}
}
getUserInfo({
name:“jojo”,
age:18,
})

5、ts中的类

关键字 class
类 是 一种用户定义的引用类型
–字段:定义类中的变量
–构造函数:类实例化的时候调用,为类的对象分配内存
–方法:对象中要执行的操作
例如:
class Car{
engine:string;
constructor(engine:string){
this.engine = engine;
};
post():void{
console(“发动机:”,this.engine);
}
}

6、类的继承

关键字 extends
class Animal{
move(distance:number = 0){
console.log(“移动的距离是:”,distance)
}
}
class Dog extends Animal {
bark(){
console.log(“汪汪汪”)
}
}
const dog = new Dog()
dog.bark();
dog.move(10)
Dog是派生类,子类,继承Animal
Animal是超类

子类可以对父类的方法进行重新定义,称为 重写 super
例如
class Dog2 extends Amial{
move(distance:number=0){
super.move();
console.log(“我在Dog2里面重写了父类Amial里面的move方法”)
}
}

7、ts中的修饰符

–public :可以自由访问类中定义的内容
–private :只能在类的内部进行访问
–protect :除了可以在类的内部进行访问,还可以在子类中进行访问
–readonly:只读

例如
class Father{
private name:string;
constructor(name:string){
this.name = name;
}
}
const father = new Father(“wangjiaer”)
father.name //会报错,只能在Father类的内部进行访问

class Father{
protect name:string;
constructor(name:string){
this.name = name;
}
}
//上述name变量也是不能访问的,这和private相似
但是protect我们可以通过子类来进行方法访问
class Son extends Father{
say(){
console.log(this.name)//子类中可以访问
}
}

class Father{
readonly name:string;
constructor(name:string){
this.name = name;
}
}
const father = new Father(“wangjiaer”)
father.name = “wxxx”//报错 只读 不允许修改

8、抽象类 & 使用技巧

抽象类能够作为其他派生类的基类去使用,抽象类一般不会直接被实例化的
关键字 abstract
例如:
abstract class Animal{
abstract makeSound():void;
move():void{
console.log(“move”)
}
}
class Cat extends Animal{
makeSound(){
console.log(“miaomiao”)
}
}

const cat = new Cat()
cat.makeSound();
cat.move();

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

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

相关文章

[渗透测试学习] TwoMillion-HackTheBox

TwoMillion-HackTheBox 信息搜集 nmap扫描一下 nmap -sV -v 10.10.11.221扫描结果 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0) 80/tcp open http nginx 3851/tcp f…

LeetCode第797题: 所有可能的路径

目录 1.问题描述 2.问题分析 1.问题描述 给你一个有 n 个节点的有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09;。 graph[i] 是一个从节点 i 可以访问的所有节点的列表&#xff08…

解决IDEA https://start.spring.io/连接不上

1.换成下边这个地址试试 https://start.springboot.io/2.换成阿里云试试&#xff0c;绝对可行&#xff0c;但是版本有点低 https://start.aliyun.com

使用Java调用音乐开放API,并进行播放

使用Java调用音乐开放API&#xff0c;并进行播放 背景描述 电脑没有下载音乐软件&#xff0c;使用网页播放又不太方便&#xff0c;所有就想着使用Java语言直接调用音乐开放API&#xff0c;然后进行播放音乐。 具体代码如下&#xff0c;包含了注释 package com.lowkey.comple…

python学习笔记B-06:序列结构之列表--列表的创建和删除

序列结构主要有列表、元组、字典、集合和字符串&#xff0c;列表是要学习的第一种序列结构。下面是列表的创建和删除方法。 import random #导入一个随机数发生器 print("创建列表方法1&#xff1a;直接列表名&#xff0c;等号&#xff0c;方括号中间内容用逗号隔开&quo…

基于小程序实现的精准扶贫数据收集系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;ssm 【…

python将xml格式文件转成png或者pdf格式

本文主要介绍运行NCCL代码时输出的xml文件该如何转成更加容易观看的图格式 如下是举例&#xff0c;服务器上的PCIE相关的topo xml 文件 <system version"1"><cpu numaid"1" affinity"ffffff00,0000ffff,ff000000" arch"x86_64&q…

AWB学习记录

主要参考食鱼者博客&#xff1a;https://blog.csdn.net/wtzhu_13/article/details/119301096&#xff0c;以及相关的论文&#xff0c;感谢食鱼者老师整理分享。 灰度世界和完全反射 灰度世界法和完全反射法分别是基于(Rmean, Gmean, Bmean)和(Rmax, Gmax, Bmax)来进行白平衡校…

内部类

一.概念 当一个事物内部&#xff0c;还有一个部分需要一个完整的结构进行描述&#xff0c;而这个内部的完整的结构又只为外部事物提供服务&#xff0c;那么将这个内部的完整结构最好使用内部类。在Java中&#xff0c;可以将一个类定义在另一个类或者一个方法内部&#xff0c;前…

第46篇:随机存取存储器(RAM)模块<五>

Q&#xff1a;本期我们使用Quartus软件的IP Catalog工具创建双端口RAM。 A&#xff1a;前期创建的RAM存储模块只有一个端口&#xff0c;同时为读/写操作提供地址。我们将再创建一个具有两个地址输入端口的RAM模块&#xff0c;分别为读操作和写操作提供地址。选择Basic Functio…

2000-2022年各省人力资本水平数据(含原始数据+计算过程+计算结果)(无缺失)

2000-2022年各省人力资本水平数据&#xff08;含原始数据计算过程计算结果&#xff09; 1、时间&#xff1a;2000-2022年 2、来源&#xff1a;国家统计局 3、指标&#xff1a;普通高等学校在校学生数(万人)、年末常住人口&#xff08;万人&#xff09;、人力资本水平 4、范…

网络编程day6

#include <myhead.h> void Insert_Record(sqlite3* ppDb); // 插入记录 void Delete_Record(sqlite3* ppDb); // 删除记录 void Update_Record(sqlite3* ppDb); // 修改记录 int main(int argc, const char *argv[]) { //1、定义一个数据库句柄指针sqlite3 * ppDb NULL;…

面试经典150题——相同的树

​ 1. 题目描述 2. 题目分析与解析 要编写一个判断两棵二叉树是否完全相同的代码&#xff0c;首先需要理解何谓“完全相同”的二叉树。完全相同意味着两棵树的结构完全一致&#xff0c;并且所有对应的节点上的值也必须相同。 1. 定义问题 首先明确问题定义&#xff1a;给定…

RC4Drop加密技术:原理、实践与安全性探究

title: RC4Drop加密技术&#xff1a;原理、实践与安全性探究 date: 2024/4/18 20:47:30 updated: 2024/4/18 20:47:30 tags: RC4算法流加密安全性RC4Drop技术密钥流加密解密网络通信 第一章&#xff1a;介绍 1.1 加密技术的重要性 加密技术在当今信息社会中扮演着至关重要的…

R语言计算:t分布及t检验

t分布理论基础 t分布也称Student’s t-distribution&#xff0c;主要出现在小样本统计推断中&#xff0c;特别是当样本量较小且总体标准差未知时&#xff0c;用于估计正态分布的均值。其定义基于正态分布和 X 2 X^{2} X2分布&#xff08;卡方分布&#xff09;。如果随机变量X服…

Matlab r2023b Simulink 给子系统添加封面

写这篇记录的原因是&#xff0c;r2023b版本里改动了自定义封面的界面&#xff0c;而我是一个新手小白&#xff0c;零基础&#xff0c;探索一天之后发现实现方法。最终效果如图&#xff1a; 步骤1&#xff1a;打开软件&#xff0c;点击Simulink&#xff0c;再打开含有子系统的工…

【基础】在GCC中编译和链接不是一个命令

在 GCC&#xff08;GNU Compiler Collection&#xff09;中&#xff0c;编译和链接不是一个命令。编译是将源代码转换为目标代码的过程。它主要进行语法检查、词法分析、生成中间代码等操作。链接是将多个目标文件和库文件组合成一个可执行文件的过程。在 GCC 中&#xff0c;通…

Cesium实现加载离线地形数据(nginx发布数据,cesiumLab地形切片数据)

实现效果如图&#xff1a; 详细步骤 1 下载地形数据&#xff08;DEM&#xff09; 下载地址&#xff1a;地理空间数据云 (gscloud.cn) 操作步骤&#xff1a; 注意&#xff1a;第3步可以自主选择DEM的分辨率&#xff0c;然后下载。 下载结果解压后如下图&#xff1a; 2 使用…

C语言 递归

递归指的是在函数的定义中使用函数自身的方法。 举个例子&#xff1a; 从前有座山&#xff0c;山里有座庙&#xff0c;庙里有个老和尚&#xff0c;正在给小和尚讲故事呢&#xff01;故事是什么呢&#xff1f;“从前有座山&#xff0c;山里有座庙&#xff0c;庙里有个老和尚&…

python3高级特性

1. 装饰器 装饰器是 Python 的一种高阶函数&#xff0c;它可以在不修改函数内部代码的情况下&#xff0c;给函数增加额外的功能。 案例&#xff1a;记录函数执行时间的装饰器 import time def timing_decorator(func): def wrapper(*args, **kwargs): start_time time.t…
最新文章