TS基础
typescript 是 javascript 的超集,支持 ecmascript6标准
比 javascript 多了一个类型检查
any unknown never void
interface
定义一个类型接口,使用过程中约束
- interface object
interface User {
name:string
age?:number
readonly id:number
}
- interface fucntion 函数类型
interface UserFun {
(name:string,ange:number): void;
}
// 使用
const myfun:UserFun = (name,age) => {
console.log('name')
}
类 class
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
let greeter = new Greeter("world");
我们使用new构造了Greeter类的一个实例。 它会调用之前定义的构造函数,创建一个Greeter类型的新对象,并执行构造函数初始化它
泛型
约定类型占位
//不用泛型:
function test(arg:number):number{
return arg;
}
// 使用泛型
fucntion test1<T>(arg:T):T{
return arg
}
枚举
使用枚举我们可以定义一些有名字的数字常量。
enum Direction {
Up = 1,
Down,
Left,
Right
}
迭代器和生成器
iterators():Iterator
Generator
装饰器
装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上。 装饰器使用 @expression这种形式,expression求值后必须为一个函数,它会在运行时被调用,被装饰的声明信息做为参数传入。
@sealed
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
继承 多态 重载 重写
面向对象语言的特征
继承
class Person{
move(){
console.log('yidong')
}
}
class Human extends Person{
constructor(theName:string){
super()
}
}
const human = new Human();
human.move()//
重写
子类重写父类中的方法,当子类继承父类的时候,调用方法,则会执行子类中的方法,不会执行父类中的方法
class Person{
move(dis){
console.log(dis+'fuqin')
}
}
class Human extends Person{
constructor(theName:string){
super()
}
move(dis){
console.log(dis+'children')
}
}
const human = new Human();
human.move(33)//
重载
方法参数不同,调用的方法不同
抽象类&抽象方法
面试题
1、什么是什么类型推论
根据上下文环境推导出来变量的类型叫类型推论。
2、一下的类型
let f = null;//f 推论为 any
3、type 和 inferface 的区别
interface 侧重与描述数据结构,type(类型别名)侧重与描述类型
不同点:
- interface 可以多次定义,合并,type 不行
- type 能使用 in关键字,interface 不行