当前位置: 首页 > news >正文

TypeSctipt学习第二篇

在这里插入图片描述

TypeSctipt学习第二篇

 这里是读阮一峰老师的TS文章笔记记录

链接: link

TypeScript主要是类型约束与TS静态自检测。就是写代码的时候就给你排除存在的错误了。
所以Ts就行去设计一些规范按照这些规范来减少错误发生。
JavaSctipt没有的强类型与潜在的问题监测TS加进去了。

1.变量声明

let x:string;变量x的后面使用冒号,声明了它的类型为string

2.联合类型

let x:string|number;这个变量可以是string或者number.

3.联合类型 可以 直接用值来设置,类似枚举

let setting: true | false;//值可以是true或false
let gender: "male" | "female";
let Color: "赤" | "橙" | "黄" | "绿" | "青" | "蓝" | "紫";值可以是其中一个Color="橙";

4.函数参数,返回值规定类型

function toString(num: number,id: number | string): string {这里规定了参数,返回值类型return String(num);
}
//函数类型限制
function distanceFromOrigin([x, y]: [number, number]) {}

5.判断参数scheme的类型是http还是https

function getPort(scheme: "http" | "https") {http,https 这是类型switch (scheme) {case "http":return 80;case "https":return 443;}
}

6.交叉类型,同时满足几种类型

let x: number & string;

7.type命令用来定义一个类型的别名。

定义一个类型,用于限制变量的值必须是我定义的类型。
type关键字会给你的类型取一个名字 你后面用它去限制变量就行。

type abc = number;
let age: abc = 55;
type leix1=number | string 联合离线 or
type leix2='男' | '女'     类似枚举type Area={width:number,heigth:number} 定义一个类型
let a:Area;这个a就是Area类型的
type Address={guojia:string,shenfen:string} 定义一个类型
type houser=Area & Address; 交叉类型
let b:houser={...} 需要同时有以上两个类型

8.判断x的类型

if (typeof x === "string") {...}

9.数组声明

let a:number[]=[1,2,3];一个类
let arr: (number | string)[]=[1,'b',2];数组内多个类型
let arr: Array<number> = [1, 2, 3];泛型,就是可以是自定义的类型
let arr: Array<number | string>[1, 2, 3,'aaa'];;泛型  可以是多种类型arr.length = 2;这样可以将只保留前面两个元素在里面,删除其他元素

10.只读数组,不能再去修改它

const arr: readonly number[] = [0, 1];
const arr = [0, 1] as const;
实际上,TypeScript 提供了两个专门的泛型,用来生成只读数组的类型。
const a1: ReadonlyArray<number> = [0, 1];
const a2: Readonly<number[]> = [0, 1];

11.多维数组

TypeScript 使用T[][]的形式,表示二维数组,T是最底层数组成员的类型。

var multi: number[][] = [[1, 2, 3],[23, 24, 25]];

12.元组(tuple)是 Ts 特有的数据类型,

	类型可以自由设置的数组,即数组的各个成员的类型可以不同。const s: [string, string, boolean] = ["a", "b", true];let a: [number, number?] = [1]; 第二个成员是可选的,可以省略元组个数也是严格根据类型个数let x: [string, string] = ["a", "b"];x[2] = "c";  报错但是,使用扩展运算符(...),可以表示不限成员数量的元组type NamedNums = [string, ...number[]];//[string, ...boolean[], number];const b: NamedNums = ["B", 1, 2, 3];

13.只读元组

// 写法一
type t = readonly [number, string];
// 写法二
type t = Readonly<[number, string]>;

14.数组与元组的区别:数组类型写[]外面

数组:number[],
元组:[number]

15.三种特殊类型

any //类型表示没有任何限制
unknown //赋值给any和unknown以外类型的变量都会报错
never//什么类型都不是

16.undefined和null既是值,又是类型。

let a:undefined=undefined;

17类 和 类的继承

父类
class person{name:string,age:numberconstructor(name:string,age:number){构造函数this.name=namethis.age=age}speak(){console.log(`我叫${this.name},今年${this.age}岁!`)}
}
子类,继承
class Student extends person{banji:stringconstructor(name:string,age:number,banji:string){super(name,age)this.banji=banji}study(){console.log(`我叫${this.name},今年${this.age}岁,我在${this.banji}`)}Override speak(){...}重写父类方法
}

构造函数简写,修饰符不能丢

class person{constructor(public name:string, public age:number){}//不用声明不用this.name=name}

类的四种修饰符 ,去修饰属性或方法 访问限制
public‌:默认修饰符,表示公共的,任何位置都可以访问该成员。没有明确指定修饰符时,默认即为public。
‌private‌:表示私有的,只有自身内部可以访问,外部、子类中都无法访问该成员数据。
‌protected‌:表示受保护的,自身内部和子类中可以访问,外部无法访问。
‌readonly‌:表示只读,仅可在构造函数中修改。

class person{constructor(private name:string, public age:number){}//不用声明不用this.name=name}

抽象类 abstract

不能被实例化,存在的意义就是被继承,有抽象方法,有具体实现方法。

  abstract class car{constructor(public pinpai:string){}构造函数abstract info():string 抽象方法showinfo():void{具体方法console.log(${this.pinpai})}}下面继承 实现它class toyota extends car{constructor(pinpai:string, public color:string){super(pinpai)}子类构造函数info():string{ return this.color;}实现抽象方法
}

接口 interface

去约束别的 类,对象 ,函数 的实现方式。

 定义一个接口,继承它的必须有这些属性方法interface Iperson{name:string,age:numberspeak(n:number):void}定义一个  类   去实现 接口Class zhangsan implements Iperson{...里面正常写只要有接口的属性 和方法就行}实现多个用逗号隔开
 定义一个接口,继承它的必须有这些属性方法interface Iperson{name:string,readonly sex:number,只读age?:number 可选speak(n:number)=>void}定义一个  对象  去实现 接口const lisi:Iperson={...里面正常写只要有接口的属性 和方法就行}
 定义一个接口,用来约束函数interface IF1{(a:number,b:number):number; 参数返回值必须跟这一样}一个  函数  去实现 接口const fun1:IF1=(a,b)=>{return a+b;}
接口之间的继承 I1 extends I2{...}
使用就是都要满足

泛型

参数类型设计时不知道,调用时候才给类型。

泛型函数

 定义泛型函数,这里不知道参数的类型是什么function logshow<T>(data:T){console.log(data);
}
logshow<string>("php");现在告诉他传一个字符串
 定义泛型函数,多个参数这个方法说我有两个参数,类型都不知道,返回值类型是其中的一个类型function logshow<T,A>(data1:T,data2:A):T|A{return Date.now()%2?data1:data2;
}
logshow<string,number>("php",20);现在告诉他传一个字符串

泛型接口

 定义一个接口,接口里面需要一个类型,什么类型不知道现在interface Iperson<T>{name:string,readonly sex:number,只读age?:number 可选info:Tspeak(n:number)=>void}定义一个对象去实现 接口,现在才给它类型,可以是自定义类型。const lisi:Iperson<number>={..    info:100}

泛型类

 定义泛型类class person<T>{constructor(name:string,age:number,info:T)show():string{return this.name}
}
const obj=new person<string>("php",20,"hello");实例化类的时候告诉它是个string

装饰器

通过方法 类上面加特性 让类有一些其他的功能。

相关文章:

  • uni-app之旅-day01-home页
  • 第18周 3-过滤器
  • 关于公司小程序项目在登录流程获取token并全局使用的梳理(学习篇)
  • 【从零开始实现stm32无刷电机FOC】【实践】【7.1/7 硬件设计】
  • 25 基于51单片机的温度电流电压检测系统(压力、电压、温度、电流、LCD1602)
  • MongoDB入门
  • 第十三届蓝桥杯真题Python c组D.数位排序(持续更新)
  • A Learning-Based Approach to Static Program Slicing —— 论文笔记
  • web应用合规(一)双因子认证2FA解决方案
  • 音视频通话 SDK
  • 数据结构——队列的基本操作
  • [leetcode] 70. 爬楼梯
  • 前端工程化之vite
  • 汽修行业的知识库搭建:赋能在线教育与知识付费
  • uni-app之旅-day02-分类页面
  • JavaScript-如何实现克隆(clone)函数
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Angularjs之国际化
  • centos安装java运行环境jdk+tomcat
  • IndexedDB
  • JavaScript设计模式系列一:工厂模式
  • js ES6 求数组的交集,并集,还有差集
  • JS函数式编程 数组部分风格 ES6版
  • MySQL QA
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Redis字符串类型内部编码剖析
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 分类模型——Logistics Regression
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (SERIES12)DM性能优化
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (利用IDEA+Maven)定制属于自己的jar包
  • (十八)SpringBoot之发送QQ邮件
  • (学习总结)STM32CubeMX HAL库 学习笔记撰写心得
  • (一)面试需要掌握的技巧
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .Net Core中Quartz的使用方法
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .net的socket示例
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...