TS基礎
typescript 是 javascript 的超集,支持 ecmascript6標準
比 javascript 多了一個類型檢查
any unknown never void
interface
定義一個類型接口,使用過程中約束
- interface object
interface User {
name:string
age?:number
readonly id:number
}
- interface fucntion 函數(shù)類型
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類的一個實例。 它會調(diào)用之前定義的構造函數(shù),創(chuàng)建一個Greeter類型的新對象,并執(zhí)行構造函數(shù)初始化它
泛型
約定類型占位
//不用泛型:
function test(arg:number):number{
return arg;
}
// 使用泛型
fucntion test1<T>(arg:T):T{
return arg
}
枚舉
使用枚舉我們可以定義一些有名字的數(shù)字常量。
enum Direction {
Up = 1,
Down,
Left,
Right
}
迭代器和生成器
iterators():Iterator
Generator
裝飾器
裝飾器是一種特殊類型的聲明,它能夠被附加到類聲明,方法, 訪問符,屬性或參數(shù)上。 裝飾器使用 @expression這種形式,expression求值后必須為一個函數(shù),它會在運行時被調(diào)用,被裝飾的聲明信息做為參數(shù)傳入。
@sealed
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
繼承 多態(tài) 重載 重寫
面向?qū)ο笳Z言的特征
繼承
class Person{
move(){
console.log('yidong')
}
}
class Human extends Person{
constructor(theName:string){
super()
}
}
const human = new Human();
human.move()//
重寫
子類重寫父類中的方法,當子類繼承父類的時候,調(diào)用方法,則會執(zhí)行子類中的方法,不會執(zhí)行父類中的方法
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)//
重載
方法參數(shù)不同,調(diào)用的方法不同
抽象類&抽象方法
面試題
1、什么是什么類型推論
根據(jù)上下文環(huán)境推導出來變量的類型叫類型推論。
2、一下的類型
let f = null;//f 推論為 any
3、type 和 inferface 的區(qū)別
interface 側(cè)重與描述數(shù)據(jù)結(jié)構,type(類型別名)側(cè)重與描述類型
不同點:
- interface 可以多次定義,合并,type 不行
- type 能使用 in關鍵字,interface 不行