国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[學(xué)習(xí)筆記]TypeScript查缺補漏(一):類

這篇具有很好參考價值的文章主要介紹了[學(xué)習(xí)筆記]TypeScript查缺補漏(一):類。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

基礎(chǔ)知識

創(chuàng)建類型

class Abc { }

類的初始化

const abc = new Abc();

類型和值

類既可以作為類型使用,也可以作為值使用。


const a:Bag = new Bag()

JSDoc 注釋

JSDoc 是 JavaScript 的一種注釋規(guī)范,它使用特定的注釋格式來自動生成 API 文檔。JSDoc 通過注釋來提取信息,例如函數(shù)名、參數(shù)類型和返回類型等,然后使用這些信息生成人類可讀的文檔。

示例:

/**  
 * 這是一個函數(shù)注釋  
 * @param {string} 參數(shù)名 - 參數(shù)描述  
 * @returns {number} 返回值描述  
 */  
function myFunction(參數(shù)名) {  
  // 函數(shù)實現(xiàn)  
  return 0;  
}

在這個例子中,/** 開始一個多行注釋,然后在注釋中使用 @param 和 @returns 來描述函數(shù)的參數(shù)和返回值。JSDoc 還支持其他注釋標簽,例如 @description、@type 和 @example 等。

字段

class User extends Account implements Updatable, Serializable {
    id: string;                     //普通字段
    displayName?: boolean;          //可選字段
    name!: string;                  //非可選字段
    #attributes: Map<any, any>;    //私有字段
    roles = ["user"];               //有默認值的字段
    readonly createdAt = new Date() // 帶有默認值的只讀字段
}

私有字段

class Foo {  
    private myAny = 1;  
}  
  
class Bar {  
    #myAny = 1;  
}

私有成員只能在它們所屬的類內(nèi)部訪問,類的外部無法直接訪問這些私有成員。

示例:

class MyClass {  
    #myPrivateVariable: string;  
  
    public myPublicMethod() {  
        console.log(this.#myPrivateVariable); // 正確,可以在類內(nèi)部訪問私有成員  
    }  
}  
  
const obj = new MyClass();  
console.log(obj.#myPrivateVariable); // 錯誤,私有成員無法從外部訪問

區(qū)別
private在編譯后JavaScript中沒有影響,僅對TypeScript編譯器有影響,而使用#符號聲明的私有屬性在JavaScript中會被編譯為常規(guī)的私有屬性。

可選和非可選字段

感嘆號(!)用于標記屬性或方法為非可選(non-optional)。這意味著該屬性或方法在類實例化時必須提供值,否則將導(dǎo)致編譯錯誤。

class Person {  
  constructor(public name: string, public age: number!) {  
  }  
}  

const person = new Person("Alice", 25); // 正確,age 屬性必須提供值  
const personOptional = new Person("Bob"); // 錯誤,age 屬性未提供值

問號(?)用于標記屬性或方法為可選(optional)。這意味著該屬性或方法在類實例化時可以省略,不會導(dǎo)致編譯錯誤。

class Person {  
  constructor(public name: string, public age?: number) {  
  }  
}  
  
const person = new Person("Alice"); // 正確,age 屬性未提供值  
const personOptional = new Person("Bob", 25); // 正確,age 屬性提供了值

字段類型約束

[key: string]: number; 是一種對象類型的寫法,表示對象的鍵是字符串類型,值是數(shù)字類型。

示例:

const person: { [key: string]: number } = {  
  age: 25,  
  height: 170,  
  weight: 65  
};

Getter/Setter

Getter 是一個獲取屬性的方法,Setter 是一個設(shè)置屬性的方法??梢允褂?get 和 set 關(guān)鍵字來定義它們。
Getter/Setter可以在不改變屬性的訪問權(quán)限的情況下,對屬性的值進行更精細的控制。比如可以在讀取或設(shè)置屬性的值時添加額外的邏輯。

class Person {  
  private _name: string;  
  
  get name(): string {  
    return this._name;  
  }  
  
  set name(value: string) {  
    this._name = value;  
  }  
}  
  
let person = new Person();  
person.name = "John"; // 使用 setter 設(shè)置值  
console.log(person.name); // 使用 getter 獲取值,輸出 "John"

靜態(tài)成員

靜態(tài)方法中this指向類本身,而不是類的實例對象。

class StaticClass {  
    n?:number=4;

    //靜態(tài)字段
    static s:number

    //靜態(tài)方法
    static staticMethod() {  
        this.s=5
        console.log('This is a static method');  
  }  
}

StaticClass.staticMethod(); // 調(diào)用靜態(tài)方法
var staticClass=new StaticClass();
console.log(staticClass.n)     //類成員不受影響 ,輸出4
console.log(staticClass.s)     //undefined 


console.log(StaticClass.n)     //undefined
console.log(StaticClass.s)     //靜態(tài)類成員不受影響 ,輸出5

函數(shù)重載

在 TypeScript 中,可以使用函數(shù)重載(Function Overloading)來定義多個同名函數(shù),它們具有不同的參數(shù)類型或參數(shù)數(shù)量。這可以幫助提高代碼的可讀性和可用性。

要實現(xiàn)函數(shù)重載,需要遵循以下規(guī)則:

  1. 重載的函數(shù)必須同名。
  2. 重載的函數(shù)參數(shù)類型或數(shù)量必須不同。
  3. 重載的函數(shù)可以有一個或多個重載。
  4. 函數(shù)重載不能改變函數(shù)的返回類型。

示例:

  update: (retryTimes: number) => void;
  update(retryTimes: number): void;

構(gòu)造函數(shù)

構(gòu)造函數(shù)是用于創(chuàng)建和初始化對象實例時候被調(diào)用的特殊方法,用于初始化對象的屬性并為其分配內(nèi)存空間。

示例:

class Person {  
  private name: string;  
  private age: number;  
  
  constructor(name: string, age: number) {  
    this.name = name;  
    this.age = age;  
  }  
  
  greet() {  
    console.log(`名字 ${this.name} 年齡 ${this.age}`);  
  }  
}  
  
var person = new Person("John", 30);  
person.greet(); // 輸出 "名字 John 年齡 30" 

參數(shù)屬性

可以使用參數(shù)屬性(Parameter Properties)來在類中定義與函數(shù)參數(shù)相關(guān)的屬性。參數(shù)屬性提供了一種簡潔的方式來聲明與函數(shù)參數(shù)相關(guān)的屬性,而不需要顯式地使用 this 關(guān)鍵字。

示例:

class Person {  
  constructor(public name: string, public age: number) {}  
}

var person = new Person("John", 30);  
console.log(person.name); // 輸出 "John"  
console.log(person.age); // 輸出 30

類的實例化

  
  (): JSONResponse              //  可以通過 () 調(diào)用這個對象 -(JS中的函數(shù)是可以調(diào)用的對象) 
  new(s: string): JSONResponse; // 可以在此類對象上使用 new

示例:實例化泛型對象

class Person {  
  age= 25;
  height= 170;  
  weight= 65;
  constructor() {  
  }  
}  

class PersonService<TService> {
    Service?: TService;
    Init(service?: { new(): TService }) {
        if (service != null) {
            this.Service = new service();
        }
    }
}

var p = new PersonService<Person>(); 
p.Init(Person);
console.log(p.Service?.age);  // 25
console.log(p.Service?.height);  // 170
console.log(p.Service?.weight);  // 65

箭頭函數(shù)

在箭頭函數(shù)中,this不指向調(diào)用該函數(shù)的對象,而是指向定義該箭頭函數(shù)時的上下文。
盡管箭頭函數(shù)是在對象的方法中定義的,但是它不會捕獲到調(diào)用該方法的對象作為自己的this上下文。

示例:

let obj = {  
    value: "I am an object",  
    printValue: () => { console.log(this.value); }  
}  
  
obj.printValue(); // 輸出:"I am an object"

this的作用域

全局

在全局作用域或單獨的函數(shù)作用域中,this引用的是全局對象。

console.log(this); // 在全局作用域中輸出:window對象  
  
function testFunc() {  
    console.log(this); // 在函數(shù)作用域中輸出:window對象  
}  
  
testFunc();

類和對象方法

當(dāng)函數(shù)作為對象的方法被調(diào)用時,this指的是obj對象。

let obj = {  
    name: 'Example Object',  
    printName: function() {  
        console.log(this.name);   
    }  
}  
  
obj.printName(); // 輸出:"Example Object"

當(dāng)調(diào)用類中的函數(shù)時,this指的是類的實例對象。

class MyClass {  
    myMethod() {  
        console.log(this); // 輸出:MyClass的實例對象  
    }  
}  
  
const obj = new MyClass();  
obj.myMethod();

泛型

泛型是一種允許你在定義類、接口、函數(shù)和方法時使用類型參數(shù)的功能。泛型允許你編寫靈活的代碼,同時保持類型安全。通過使用泛型,你可以在強類型環(huán)境中編寫可重用的代碼,而無需擔(dān)心具體的類型實現(xiàn)細節(jié)。

泛型類


class Box<Type>{
    contents?: Type
    constructor(value: Type) {
    this.contents = value;
}}

var stringBox = new Box("a package");
console.log(stringBox.contents) // a package

泛型接口

interface Generator<T> {  
  generate(): T;  
}  
  
class RandomNumberGenerator implements Generator<number> {  
  generate() {  
    return Math.random();  
  }  
}  
  
let generator = new RandomNumberGenerator();  
let randomNumber = generator.generate(); // 類型為 number

泛型函數(shù)

function identity<T>(arg: T): T {  
  return arg;  
}  
  
let x = identity<number>(123); // 類型為 number  
let y = identity<string>("hello"); // 類型為 string

裝飾器

裝飾器是使用 @ 符號來標識的特殊類型的函數(shù),可以用來擴展類或方法的行為。實現(xiàn)類似面向切面編程的特性。

可以在類、類方法、訪問器、屬性和方法參數(shù)上使用裝飾器

示例:

function log(target: any, obj:any) {  
  console.log(target)
  console.log(`Creating instance of ${target.name}`);  
}  
  
@log  
class MyClass {  
  myMethod() {  
    console.log("Hello, World!");  
  }  
}  

const instance = new MyClass();

TypeScript示例可在https://www.typescriptlang.org/play中調(diào)試文章來源地址http://www.zghlxwxcb.cn/news/detail-739265.html

到了這里,關(guān)于[學(xué)習(xí)筆記]TypeScript查缺補漏(一):類的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • typeScript 學(xué)習(xí)筆記(二)

    typeScript 學(xué)習(xí)筆記(二)

    類接口 · TypeScript 入門教程 (xcatliu.com) ① 類 類:定義了一件事物的抽象特點,包含它的屬性和方法 對象:類的實例,通過new生成 面向?qū)ο螅∣OP)的三大特性:封裝、繼承、多態(tài) 封裝(Encapsulation):將對數(shù)據(jù)的操作細節(jié)隱藏起來,只暴露對外的接口。外界調(diào)用端不需要(也

    2024年02月09日
    瀏覽(29)
  • TypeScript學(xué)習(xí)筆記

    let num [ :number ] = 10; // 以冒號加類型的方式,聲明變量 1.2.1 基本類型 1 number 2 string 3 boolean 4 null 5 undifined 1 數(shù)值 number? let num : number = 10;? 二進制 = 0b 1010; 八進制 = 0o 18; 十六進制 = 0x abc; 2 字符串 string 例 let str: string = \\\'abc\\\'; 3 布爾 boolean // let flag: boolean = true; 4 空 null // let nul:

    2024年02月12日
    瀏覽(13)
  • TypeScript 學(xué)習(xí)筆記(一):類型

    TypeScript 學(xué)習(xí)筆記(一):類型

    TS中實現(xiàn)對象屬性必選、對象屬性在開發(fā)過程中十分常見,前端在傳參數(shù)時,有些參數(shù)比必傳,有些是選傳,我們可以定一個多個對象來實現(xiàn)傳參,但是這讓代碼變得冗余。我們可以通過TS定義數(shù)據(jù)類型來實現(xiàn)。 TypeScript中文網(wǎng) 1. 數(shù)組 2. 布爾 3. 數(shù)值 當(dāng)我們給num賦值為123但沒有

    2024年02月13日
    瀏覽(26)
  • Typescript學(xué)習(xí)筆記(1.0)

    Typescript學(xué)習(xí)筆記(1.0)

    typescript是由微軟開發(fā)的自由和開源的編程語言。 typescript是JavaScript的一個超集,就是說JavaScript的語法typescript全部支持,并且在JavaScript進行了擴充,并在JavaScript的基礎(chǔ)上進行了變量、函數(shù)、返回值等類型限制。 首先,是安裝typescript。因為他需要編譯,需要首先安裝Node.js。

    2023年04月09日
    瀏覽(24)
  • TypeScript學(xué)習(xí)筆記(二)

    字符串字面量類型用來約束取值只能是某幾個字符串中的一個 數(shù)組:同一類型的集合 元祖:不同類型的集合 枚舉使用 enum 來定義 枚舉成員會被賦值為從 0 開始遞增的數(shù)字,同時也會對枚舉值到枚舉名進行反向映射 可以給枚舉項手動賦值: 未手動賦值的枚舉項與手動

    2023年04月09日
    瀏覽(21)
  • TypeScript 學(xué)習(xí)筆記(七):條件類型

    TypeScript 學(xué)習(xí)筆記(七):條件類型

    TS中的條件類型就是在類型中添加條件分支,以支持更加靈活的泛型,滿足更多的使用場景。內(nèi)置條件類型是TS內(nèi)部封裝好的一些類型處理,使用起來更加便利。 當(dāng)T類型可以賦值給U類型時,則返回X類型,否則返回Y類型。 T U X Y 四個是占位符,分別表示四種類型; T extends U

    2024年02月17日
    瀏覽(22)
  • TypeScript 學(xué)習(xí)筆記(四):類型守衛(wèi)

    類型守衛(wèi)的作用在于觸發(fā)類型縮小。實際上,它還可以用來區(qū)分類型集合中的不同成員 類型守衛(wèi)包括switch、字面量恒等、typeof、instanceof、in 和自定義類型守衛(wèi) 簡單說當(dāng)一個類型是多種可能時例如’any’,‘unknown’,‘聯(lián)合類型’ 等在邏輯判斷時候要具體到其唯一子集可能性

    2024年02月15日
    瀏覽(24)
  • 【TypeScript】基礎(chǔ)知識學(xué)習(xí)筆記

    TypeScript的特點: JavaScript的超集,滿足所有的JS語法 含有面向?qū)ο蟮撵o態(tài)類型 起步安裝:1、npm i typescript -g 2、tsc 文件名 一、TS的基本數(shù)據(jù)類型 基本數(shù)據(jù)類型:number、boolean、string、undefined、null、symbol、bigint、void 當(dāng)中的類型有大小寫的區(qū)分:大寫的類型是給對象使用,小寫

    2024年02月09日
    瀏覽(49)
  • CSS查缺補漏之《如何優(yōu)雅解決margin垂直方向塌陷與合并問題?》

    CSS查缺補漏之《如何優(yōu)雅解決margin垂直方向塌陷與合并問題?》

    一:父子元素之間margin垂直方向塌陷問題 在處理margin垂直方向問題時,經(jīng)常會遇到在給子元素設(shè)置margin時,導(dǎo)致效果出現(xiàn)在了父元素上;如下代碼所示: 代碼原義是想實現(xiàn)三方面: ① 將box1的margin-top調(diào)為50px,使其與父元素之間形成空隙; ② 將box2的margin-top調(diào)為20px,使其與

    2024年02月10日
    瀏覽(56)
  • 【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開發(fā)語言

    【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開發(fā)語言

    HarmonyOS 應(yīng)用的主要開發(fā)語言是 ArkTS,它由 TypeScript(簡稱TS)擴展而來,在繼承TypeScript語法的基礎(chǔ)上進行了一系列優(yōu)化,使開發(fā)者能夠以更簡潔、更自然的方式開發(fā)應(yīng)用。值得注意的是,TypeScript 本身也是由另一門語言 JavaScript 擴展而來。因此三者的關(guān)系如下圖所示 2.1.1、線

    2024年02月19日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包