最近面试时hr问我会不会ts,说会js的都会ts,我之前学到一般搞python去了,这次是回来补坑的...

『静态类型检查』

· 在代码运行前进行检查,发现代码的错误或不合理之处,减小运行时异常的出现的几率,此种检查叫『静态类

型检查』,TypeScript和核心就是『静态类型检查』,简言之就是把运行时的错误前置。

· 同样的功能,TypeScript的代码量要大于JavaScript,但由于TypeScript的代码结构更加清晰,在后期代码

的维护中TypeScript 却远胜于JavaScript。

tsc-ts编译器

安装命令

npm i typescript -g

编译文件命令tsc(.ts可以不用)

tsc index/tsc index.ts

注意:现在安装最新的 TSC 编译器并不会新增全局命令,需要写成 npx tsc index 才可以!

我就不全局安装了,怕以后版本冲突

    npm install typescript --save-dev
      npx tsc index.ts
tsc --init//初始化

自动化测试//编译时只使用 tsc 命令会读取 tsconfig 配置,如果加了文件名就会读取默认配置 变var

    npx tsc --watch index.ts/npx tsc --watch(监视所有ts文件)

"noEmitOnError": true,//在tsconfig.json上,编译错误时不要转为js

◆ JavaScript 中的数据类型

1 string

2 number

3 boolean

4 null

5 undefined

6 bigint

7 symbol

8 object
备注:其中 object 包含:Array、Function、Date 、Error 等

· TypeScript 中的数据类型

1. 上述所有JavaScript类型

2. 六个新类型:

1 any

2 unknown

3 never

4 void

5 tuple

6 enum

3.两个用于自定义类型的方式:

1 type

2 interface

any是协变,unkown是非协变

断言不是类型转换!!!只是标注类型

never不是限制变量的而是限制函数的

void后续不能用(例如用于if(内)),而undefined可以

Object只要是能调用Object方法的都能存,例如(toString)

Array<string>

前端箭头函数省略写法(一句)默认将那句的执行结果作为返回值

2.会把你写在ts里的import在转成js的时候变成require

3.然后浏览器只认识import,不认识require,所以就报错了

4.你在ts配置文件把"module"设置为"es6",问题就解决了

接口会和同名的类进行合并,这种机制被称为声明合并。

ts类和类的原型对象区别:

特性

类(Class)

类的原型对象(Prototype Object)

定义

创建对象的蓝图或模板

所有实例共享的对象,包含方法和可共享的属性

访问方式

使用 new 关键字创建实例

通过类的构造函数访问,如 Person.prototype

内容

包含属性和方法

主要包含方法和可共享的属性

实例化

可以实例化为具体对象

不可以直接实例化,只能通过类实例访问

内存占用

每个实例有自己的属性副本

方法和共享属性只有一份,节省内存

修改影响

修改类定义会影响新实例

修改原型对象会影响所有现有实例

进一步解释

原型链:每个实例都有一个内部指针(__proto__),指向其构造函数的原型对象。当访问实例的属性或方法时,JavaScript 引擎会首先在实例本身查找,如果找不到则沿着原型链向上查找。

继承:子类可以继承父类的原型对象中的方法和属性,进一步扩展或重写这些方法。

vue双向绑定原理

是vue2的双向绑定原理,vue3则是使用es6里的proxy

defineProperty将属性绑定到原型对象上,赋值时,this调用set指向实例对象,本质就是原型对象上面绑定了带有this的函数