一、简介
ts可以被编译成任何版本的js,从而解决浏览器兼容性问题
二、TS开发环境搭建
三、TS的类型声明
- number、string、boolean
- 字面量
- any(显式的any)、unknown、类型断言
声明变量不指定类型时,ts解析器会自动判断变量的类型为any(隐式的any)
- void、never
- object、Function
- array、tuple
- enum、类型的别名
四、TS编译选项
tsc命令编译ts文件,tsc -w监视文件的改变并编译
{
/*
tsconfig.json是ts编译器的配置文件,ts编译器可以根据它的信息来对代码进行编译
include 用来指定哪些ts文件需要被编译,不写的话默认全部ts文件都被编译
路径: ** 表示的是任意目录
* 表示的是任意文件
exclude 用来指定不需要被编译的文件目录
*/
"include": [
"./src/**/*" // **表示的是任意目录 *表示的是任意文件
],
"exclude": [
"./src/hello/**/*"
],
"compilerOptions": {
// 1.target 用来指定ts被编译为的ES版本
// 'es3', 'es5', 'es6', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'es2021', 'es2022', 'esnext'
"target":"es2015",
// 2.module 用来指定要使用的模块化的规范
"module": "es2015",
// 3.lib 用来指定项目中要使用的库(写代码时会有库的语法提示)
// "lib": ["ES2015","DOM"],
// 4.outDir 用来指定编译后文件所在目录
"outDir": "./dist",
// 5.outFile 将代码合并为一个文件
// "outFile": "./dist/app.js"
// 6.allowJs 是否对js文件进行编译,默认是false
"allowJs": false,
// 7.checkJs 是否检查js代码是否符合语法规范,默认是false
"checkJs": false,
// 8.removeComments 编译时是否移除注释
"removeComments": false,
// 9.noEmit 是否生成编译后的文件
"noEmit": false,
// 10.noEmitOnError 当有错误时不生成编译后的文件
"noEmitOnError": true,
// 11.alwaysStrict 用来设置编译后的文件是否使用严格模式,默认false
"alwaysStrict": false,
// 12.noImplicitAny 不允许隐式的any类型
"noImplicitAny": true,
// 13.noImplicitThis 不允许不明确类型的this
"noImplicitThis": true,
// 14.strictNullChecks 严格的检查空值
"strictNullChecks": true,
// 15.所有严格检查的总开关
"strict": true
}
}
- 常用
五、面向对象
1.类(class)
2.构造函数和this
定义类时把值给死了毫无意义,因此引出了构造函数
3.继承
- 父类
- 子类
(function(){
// 定义一个Animal类(父类)
class Animal{
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name
this.age = age
}
sayHello() {
console.log('动物在叫~');
}
}
// 定义一个表示狗的类(子类),使Dog类继承Animal类
// -使用继承后,子类将会拥有父类所有的方法和属性
// -如果希望在子类中添加父类没有的属性或方法,直接加
// -如果子类中添加了和父类相同的方法,则子类方法覆盖父类方法(方法重写)
class Dog extends Animal{
run(){
console.log('狗狗跑起来啦');
}
sayHello(){
console.log('汪汪汪!');
}
}
// 定义一个表示猫的类(子类),使Cat类继承Animal类
class Cat extends Animal{
sayHello() {
console.log('喵喵喵!');
}
}
const dog = new Dog('凡凡',5)
const cat = new Cat('白白',3)
console.log(dog);
console.log(cat);
dog.sayHello()
dog.run()
cat.sayHello()
})();
4.super关键字
新增属性时常用
5.抽象类和抽象方法
- 注意:抽象方法没有方法体
6.接口
- 接口中的要求,类中必须要实现,类中可新增其他属性、方法
7.属性的封装
属性容易被修改错或者对计算要求比较高时,用get、set进行暴露
属性的封装,让属性更安全,不再直接修改和访问属性,而是通过get、set间接操作
注意: TS可以在属性前添加属性的修饰符
1.public 修饰的属性可以在任意位置访问、修改(默认值)
2.private 私有属性,私有属性只能在类内部进行访问、修改
- 通过在类中添加方法使得私有属性可以被外部访问
3.protected 受保护的属性,只能在当前类和当前类的子类中访问、修改
优化的方案