TypeScript經常使用知識之--兼容性和抽象類

這是我參與8月更文挑戰的第8天,活動詳情查看:8月更文挑戰前端

由於Typescript的持續火爆,分享下TS的經常使用知識點,咱們一塊兒學習交流,一塊兒加油!java

兼容性

在TS中,時候須要一個類型能被一個以上的類型賦值,因此就須要這個類型兼容其餘類型算法

1.基本數據的兼容性

let a: string | number;
let b: number | string | boolean;
let c: number | string | boolean | null;

let str: string = "str";
let num: number = 1;
// a 既能夠被賦值string 也能夠支持number
a = str;
a = num;

複製代碼

2.接口兼容性

接口兼容:屬性只能多不能少typescript

interface Person {
    name: string;
    age: number;
}
interface Men {
    name: string;
    age: number;
    gender: string;
}

let p: Person = {
    name: "tom",
    age: 11,
};

let m: Men = {
    name: "tom",
    age: 11,
    gender: "male",
};

// person 能夠被賦值 Person 能夠被賦值Men
let person: Person = p;
person = m;
複製代碼

*3.函數兼容

1.函數兼容的時候 參數只能少不能多,返回值只能多不能少c#

2.rest 和 可選參數也是兼容的*markdown

interface FN1 {
    (a: number, b: number): void;
}

interface FN2 {
    (a: number): void;
}
interface FN22 {
    (a?: number): void;
     }

    interface FN222 {
        (...rest: number[]): void;
}

let fn1: FN1 = (a: number, b: number): void => {};
let fn2: FN2 = (a: number): void => {};
let fn22: FN22 = (a?: number): void => {};
let fn222: FN222 = (...rest: number[]): void => {};

// 參數只能少不能多

let fnn: FN1;
fnn = fn1;
fnn = fn2;
// rest 和 可選參數也是兼容的
fnn = fn22;
fnn = fn222;

interface FN3 {
    (a: number, b: number): { a: number; b: number };
}

interface FN4 {
    (a: number, b: number): { a: number; b: number; c: string };
}

let fn3: FN3 = (a: number, b: number): { a: number; b: number } => ({
    a: number,
    b: number,
});
let fn4: FN4 = (a: number): { a: number; b: number; c: string } => ({
    a: number,
    b: number,
    c: string,
});

// 返回值只能多不能少
let fnn1: FN3;
fnn1 = fn3;
fnn1 = fn4;
複製代碼

4.類的兼容性

構造函數不會被檢查網絡

class Fish {
    // 構造函數不會被檢查
    constructor(public a: number, public b: number) {}
}
class Shark extends Fish {
    name: string;
    // 構造函數不會被檢查
    constructor(name: string) {
        super(1, 1);
        this.name = name;
    }
}

let fish: Fish;
fish = new Fish(1, 1);
fish = new Shark("111");
複製代碼

5.泛型的兼容性

interface F1<T> {
    a: T;
}

let f1: F1<string> = { a: "1" };
let f2: F1<number> = { a: 1 };
// 報錯
// f1=f2

interface F2<T> {}

let f3: F2<string> = { a: "1" };
let f4: F2<number> = { a: 1 };
// 正確
f3 = f4;
複製代碼

抽象類

TS 中繼承了不少相似c# 和 java裏面的的特性好比 抽象類app

1.抽象類的值必須被實現

abstract class C {
  abstract fn1(): number;
  // 抽象類中也能夠定義非抽象方法
  fn2(): number {
    return 2;
  }
}

class D extends C {
  //必須實現抽象類
  fn1(): number {
    return 1;
  }
  // 可是fn2能夠不實現
}

複製代碼

2.抽象類不能被實例化

// let c =new C()//報錯
let b =new D()
複製代碼

相關資料

你們喜歡的能夠看看個人專欄 (TypeScript經常使用知識) 我會盡可能保持天天晚上更新,若是喜歡的麻煩幫我點個贊,十分感謝函數

你們若是喜歡「算法」的話,能夠看看我分享的另一個專欄(前端搞算法)裏面有更多關於算法的題目的分享,但願能幫助你們更深的理解算法oop

文章內容目的在於學習討論與分享學習算法過程當中的心得體會,文中部分素材來源網絡,若有侵權,請聯繫刪除,郵箱 182450609@qq.com

相關文章
相關標籤/搜索