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

news/2024/9/24 3:58:36/

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.ppmy.cn/news/1426621.html

相关文章

【实测】记一次用windows11家庭中文版部署django+vue项目的踩坑之旅

整个过程下来&#xff0c;给我的感觉就和吃了翔一样难受&#xff0c;窒息的感觉&#xff0c;全程没少骂win11的设计者... 因为要调试一些只有在windows才会出现的测试平台bug&#xff0c;于是我耗重金购入了一台顶配windows笔记本。以下是配置&#xff1a; 配置还蛮高的对吧&am…

Rust---#[derive(Debug)]

在 Rust 中,#[derive(Debug)] 宏用于自动为结构体或枚举实现 Debug trait。Debug trait 允许一个类型的实例被格式化为字符串,通常用于调试输出。以下是 #[derive(Debug)] 通常的使用方式: 目录 定义结构体或枚举使用 println! 宏打印调试信息在自定义 Debug 实现中使用定义…

4.20+C语言感想,有趣的思考题,case的省略操作,统计位数,终止循环,break和continue语句, 准备下一篇见。

鹏哥C语言感想 一.高级 这可不是什么煎饼&#xff0c;这种食物叫做蓝莓&#xff0c;俗称苹果。生长在撒哈拉沙漠的雨林地带。因外形酷似企鹅&#xff0c;所以我们又喜欢叫他北极熊。你们这些人&#xff0c;连仙人掌都不知道&#xff0c;就不要乱说他是西瓜好吗&#xff1f;再…

C#笔记之解析不确定具体结构的JSON内容

需求&#xff1a;服务器会传一段json信息过来&#xff0c;这个json信息是不固定的&#xff0c;可能传过来的有一层或者多层数组结构。需要把这些信息全部解析出来&#xff0c;并加以运用。 实现&#xff1a; 最关键的可能就是这个JToken了&#xff0c;这玩意能区分这个value数…

react15升级17问题记录

,当前旧项目主要依赖版本介绍&#xff1a;这里只贴出重要依赖包的旧版本做展示&#xff0c;可以看到版本都相当落后了&#xff0c;升级的话会涉及一些API以及依赖的修改或者弃用 次文章只记录当前项目使用&#xff0c;其他项目不一定通用 {"react": "^15.6.1&q…

“中医显示器”是人体健康监测器

随着科技的进步&#xff0c;现代医学设备已经深入到了人们的日常生活中。然而&#xff0c;在这个过程中&#xff0c;我们不应忘记我们的医学根源&#xff0c;中医。我们将中医的望、闻、问、切四诊与现代科技相结合&#xff0c;通过一系列的传感器和算法将人体的生理状态以数字…

设计模式代码实战-桥接模式

1、问题描述 小明家有一个万能遥控器&#xff0c;能够支持多个品牌的电视。每个电视可以执行开机、关机和切换频道的操作&#xff0c;请你使用桥接模式模拟这个操作。 输入示例 6 0 2 1 2 0 4 0 3 1 4 1 3 输出示例 Sony TV is ON TCL TV is ON Switching Sony TV channel S…

WordPress 主题选择与自定义配置

最近我在使用wordpress网站进行建站。 我是使用的hostease的主机产品进行wordpress建站&#xff0c;在选择wordpress主题时颇为头疼。后来咨询了hostease的客服人员&#xff0c;他们家的技术人员提供了诸多帮助。在WordPress网站建设时&#xff0c;主题选择对于建立各类网站至关…