一. 类的特性
这里直接写一些demo来实现ts里的类并解释一些小知识:
//实现一个类,并继承它
class Person {
// 构造方法,实例化之后自动调用,且一次实例化只调用一次
constructor() {
console.log(this.name);
}
//public 表示公共的,可在任何访问
public name = 'dahai'; // 等同于name;
//protected 表示受保护的,在类的内部和子类中可以访问
protected age = 16;
//private 表示私有的,只有在类的内部可以访问
private sex = '女'
protected play() {
console.log('xixi')
}
}
// extends 继承的关键字,继承后的类有可以使用有权限的父类的所有属性和方法
class Buy extends Person {
// 继承时要注意,如果子类也有构造函数,必须实现父类的构造函数,使用super来实现
constructor (public code:number) {
super();
this.code = code;
}
//super用法二,调用父类中的方法
work () {
super.play()
}
}
var b1 = new Buy(3);
console.log(b1.name)
b1.work();
var p1 = new Person();
console.log(p1.name);
构造函数的一些其他写法
//这个类似于上面constructor写法
class Person {
//此处的public name: string不能简写为name:string
constructor(public name: string) {
console.log(this.name);
}
}
// 注意如果construtor中有参数时,new必须传对应的参
var p1 = new Person('xiaolei');
二. 泛型
这篇文章写的很清晰,大家看看哈
https://blog.csdn.net/jasnet_u/article/details/81144199.
三. 接口
我自己理解的接口其实就是一种特殊的类,建立了某种代码约定,使别的开发者在调用某个方法时必须遵循接口的代码约定;但接口是不能实例化的,不过可以通过implements关键字来实现它。
下面来个简单的demo了解一下interface
//这里是类 类型的接口
interface Person {
name: string
age: number
sex?: string
//添加一个字符串索引签名跳过额外属性检查
[propName: string]: any;
eat():void;
}
class Buy {
constructor (public config:Person) {
}
}
/*
*必传参数:
*这里如果我们传递的参数不是name、age则ts报错,少参数多参数都不行;这是ts的额外属性检查,要想跳过最好的方法是添加一个字符串索引签名见上
*可选参数:sex后面加?,表示可选参数,可传可不传
var b1 = new Buy({
name: 'dahai',
age: 8
});
//实现person接口
class PeopleOne implements Person {
name = 'dalei'
age = 9
eat(): void {
console.log(this.name)
}
}
var a1 = new PeopleOne;
a1.eat();
四. 模块
模块中这里我主要记录一下如何导入导出,这大家应该也都很熟悉了吧,这里简单写一下,一起来看看哈。
//a.ts
export var prop1;
export function func1 () {
}
export classs Clazz1 () {
}
//在需要使用的文件中,eg:b.ts
import {prop1, func1, Clazz1 } from './a.ts'
console.log(prop1)
func1()
new Clazz1 ()