TypeScript中的编译环境

1.编译选项

自动编译文件
编译文件时,使用-w指令后,TS编译器会自动见识文件的变化,并在文件发生变化时重新对文件进行编译
示例:

tsc xxx.ts -w

自动编译整个项目

如果直接使用tsc指令,则可以自动将当前项目下的所有ts文件自动编译成js文件
但是能够直接使用tsc命令的前提是,要现在项目根目录下创建一个ts的配置文件tsconfig.jsontsconfig.json是一个json文件,添加配置文件后,只需要tsc命令即可以完成对整个项目的编译(ts编译器可以根据文件信息进行编译)

  • tsconfig.json文件中可以进行如下配置

相关的配置选项如下

include
1)路径

  • ** 表示任意目录

  • *表示任意文件

  • 定义希望被编译文件所在的目录

  • 默认值[ "**/*" ] 表示编译所有的文件

示例:

“include”: [
“./src/**/*”
]

exclude:表示除了这些文件,其他都编译
files:列出需要编译的文件

compilerOptions:包含重要的配置,其中有很多子选项

  • target:用来指定ts被编译为es的版本 ES2016|ES2015
  • “module”:指定使用模块化的规范,其可取值如下:
    在这里插入图片描述
  • lib:指定项目需要哪些库(默认情况下不改)
  • outDir:指定编译后的文件所在的目录
  • outFile: 将编译后的文件合并到一个文件中,此时只是全局作用域
  • allowJs:表示是否对js文件进行编译(boolean值)
  • checkJs:是否检查js代码是否符合语法规范,默认false
  • removeComments:编译时是否移除注释
  • noEmitOnError:错误时不生成编译后的文件
  • alwayStrict:是否使用严格模式(类似于js中使用“use strict”)

使用webpack打包ts文件

1)首先初始化项目 npm init
2)下载依赖在这里插入图片描述

2.面向对象

2.1类

在类中,所定义的属性在构造函数中为其赋值(初始化)

class Person{
    
    
	//直接定义的属性:实例属性,需要通过对象的实例访问
	name:string="huangzhizhen";
	age:number=17;
	//若使用static关键字,则可以定义类属性(静态属性),可以直接通过类访问
	static age:number=18

	//方法(和属性一样,加static可变成静态方法)
	say(){
    
    
	}
	
	constructor(name:string,age:number){
    
    
		//构造函数,会在对象被创建时调用
		//在实例方法中,this就表示当前对象
		//属性赋值在构造函数中
		this.name=name;
		this.age=age
		console.log(this);
	}
}

//创建对象可以看成是调用了该类的构造函数
const per=new Person('xiaohei',4)
const per2=new Person('xiaobai',5)
console.log(per+per2)
  • 因此,在使用类创建对象的new后面实质跟的是构造函数,通过new 构造函数来初始化对象的属性,为其赋值
  • 在这里插入图片描述

3.继承

3.1 实例
  • 继承即可以将其他类的属性引入到当前类中
  • 通过继承可以在不修改类的情况下对类进行扩展
console.log('huangzhizhen')
class Animal {
    
    
  name: string;
  age: number;
  constructor(name: string, age: number) {
    
    
    this.name = name;
    this.age = age;
  }
  run() {
    
    
    console.log('父类中的run方法')
  }
}

class Dog extends Animal {
    
    
  back() {
    
    
    console.log(`${
      
      this.name}`)
  }
  run() {
    
    
    console.log('子类中的run方法,会覆盖重写掉父类中的run方法')
  }
}

const dog = new Dog('xiaohei', 4)
dog.back();
3.2 重写

在发生继承时,若子类的方法名与父类的方法名重复,那么子类的方法会替换掉父类中的方法名

4. 抽象类

抽象类是专门用来被其他类所继承的类,它只能被其他类继承而不能创建实例

abstract class Person{
    
    
  abstract run():void;
  back(){
    
    
    console.log('Person')
  }
}

class Male extends Person{
    
    
  run(){
    
    
    console.log('Male')
  }
}

使用abstract开头的方法叫做抽象方法,抽象方法没有方法体,其实现要在继承自该抽象类的类方法中实现,如上的Male要实现Person类中的抽象方法run

5. 封装

在默认情况下,属性的值是可以被任意修改的,但是为了确保数据的安全,因此在TS中可以对数据的权限进行设置。(以限制该属性是否可以修改)

  • 静态属性(static)
    声明了static的属性不再属于实例的属性,而是属性类的属性

  • 只读属性(readOnly)
    只读不可修改

  • TS中属性的三种修饰符
    1)public:默认值,任意位置访问(修改)
    2)private :私有属性,只能在类内部进行访问(修改)
    3)protected:保护的属性,只能在当前类和子类中修改

在这里插入图片描述

6. 接口

  • 定义一个类结构,用来定义一个类中应该包含哪些属性和方法
  • 接口中所有的属性都不能有实际的值
  • 接口只定义对象的结构,而不考虑实际值(在接口中所有的方法都是抽象方法)
  • 在定义类时,可以使该类实现这个接口
  • 接口的作用就是定义规范
interface myInerface{
    
    
	name:string;
	age:number;
	sayHello():void;
}

class MyClass implements myInterface{
    
    
	name:string;
	constructor(name:string){
    
    
		this.name=name;
	}
	sayHello(){
    
    
		console.log('heihei');
	}
}

7. 泛型

  • 在定义函数或是类时,如果遇到类型不明确则可以使用泛型
  • 泛型可以同时指定多个
  • T extends Inter:表示泛型T必须是Inter实现类(子类)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

Guess you like

Origin blog.csdn.net/weixin_46872121/article/details/113814598