亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
2。在功能和接口中使用仿制藥
示例:通用API響應(yīng)包裝器
3。用extends約束仿制藥
4。多類參數(shù)和默認(rèn)類型
5。實踐中可重復(fù)使用的組件
首頁 web前端 js教程 用打字稿通用來解鎖可重復(fù)使用性

用打字稿通用來解鎖可重復(fù)使用性

Sep 16, 2025 am 03:14 AM
泛型

TypeScript Generics通過允許功能,接口和組件來啟用可重復(fù)使用的類型安全代碼,同時保留類型信息。 1。使用類型變量(例如t)來表示占位符類型,如身份功能所示,可以保留類型安全性與任何類型。 2。它們是諸如Apiresponse 之類的結(jié)構(gòu)的理想選擇,可以在API或州經(jīng)理中始終如一地處理不同的數(shù)據(jù)形狀。 3。使用擴(kuò)展,可以限制仿制藥以確保所需的屬性,例如t擴(kuò)展具有ID字段的對象的{id:numbers}。 4。多類型參數(shù)(例如,K,V,R)支持MapObject(例如MapObject)和默認(rèn)類型(例如,T =未知)(例如,t =未知)的復(fù)雜轉(zhuǎn)換,而無需犧牲靈活性。 5。仿制藥被廣泛用于實用程序功能,諸如USEFetch ()之類的React鉤子和狀態(tài)管理,以避免重復(fù)并確保編譯時安全性,這對于邏輯在不同類型的邏輯重復(fù)時對于可擴(kuò)展,可維護(hù)的代碼至關(guān)重要。

用打字稿通用來解鎖可重復(fù)使用性

打字稿仿制藥是編寫可重復(fù)使用的類型安全代碼的最強(qiáng)大功能之一。它們允許您創(chuàng)建在各種類型而不是單一類型的組件,函數(shù)或類中,而無需犧牲類型的信息。這在保持強(qiáng)大的打字時解鎖了靈活性,這在大規(guī)模應(yīng)用中至關(guān)重要。

用打字稿通用來解鎖可重復(fù)使用性

讓我們分解仿制藥如何幫助您構(gòu)建更多可重復(fù)使用的代碼以及何時使用它們。


1。什么是仿制藥? (以及為什么需要它們)

仿制藥在他們的核心上讓您編寫可以處理不同類型的功能或數(shù)據(jù)結(jié)構(gòu),同時保留類型安全性。

用打字稿通用來解鎖可重復(fù)使用性

例如,想象一個簡單的身份功能:

函數(shù)身份(arg:any):任何{
  返回arg;
}

這起作用了,但是它拋出了類型信息。使用仿制藥,您可以保留它:

用打字稿通用來解鎖可重復(fù)使用性
函數(shù)身份<t>(arg:t):t {
  返回arg;
}

在這里, T是一種類型變量- 當(dāng)調(diào)用函數(shù)時將使用任何類型的占位符。

您可以這樣稱呼它:

 const num =身份(42); //類型:數(shù)字
const str =身份(“ Hello”); //類型:字符串

Typescript Infers會自動T ,因此您不必總是寫下identity<number>(42) 。

這看起來似乎很容易,但是當(dāng)建立類型變化但行為保持一致的諸如caches,apis或州經(jīng)理之類的公用事業(yè)時,這變得至關(guān)重要。


2。在功能和接口中使用仿制藥

當(dāng)跨多種類型抽象邏輯時,仿制藥確實會發(fā)光。

示例:通用API響應(yīng)包裝器

假設(shè)您正在處理一致的API響應(yīng):

接口apiresponse <t> {
  數(shù)據(jù):t;
  狀態(tài):數(shù)字;
  消息?:字符串;
}

現(xiàn)在,您可以通過不同的端點重復(fù)使用此界面:

 const userresponse:apiresponse <user> = {
  數(shù)據(jù):{id:1,名稱:“ Alice”},
  狀態(tài):200,
};

const postsresponse:apiresponse <post []> = {
  數(shù)據(jù):[{id:1,title:“ hello”}],
  狀態(tài):200,
};

現(xiàn)在,您的組件或服務(wù)可以在不知道T的確切形狀的情況下處理ApiResponse<T> ,但仍提供完整的自動完成和類型檢查。


3。用extends約束仿制藥

有時您想要靈活性 - 但不是太多。您可以限制使用extends通用類型接受的類型。

例如,假設(shè)您需要一個從對象中提取屬性的函數(shù),但前提是它具有id字段:

函數(shù)logid <t擴(kuò)展{id:number}>(item:t):void {
  console.log(item.ID);
}

現(xiàn)在,這可以確保任何傳遞的參數(shù)必須具有類型numberid

 logid({id:123,name:“ bob”}); //?好
logid({name:“ charlie”}); //錯誤:缺少&#39;id&#39;

這種模式在需要結(jié)構(gòu)保證的情況下,在公用事業(yè)功能,表單處理程序或串行中很常見。


4。多類參數(shù)和默認(rèn)類型

您不僅限于一種通用類型。

功能mapObject <k,v,r>(
  obj:記錄<k,v>,
  fn :( value:v)=> r
):記錄<k,r> {
  返回對象。Fromentries(
    object.entries(obj).map(([[key,value])=> [key,fn(value)])
  )作為記錄<k,r>;
}

另外,您可以提供默認(rèn)類型以獲得更好的人體工程學(xué):

接口queryResult <t = unknown> {
  數(shù)據(jù):t;
  加載:布爾值;
}

現(xiàn)在,如果未指定任何類型, QueryResult值為unknown ,但保持靈活。


5。實踐中可重復(fù)使用的組件

仿制藥特別有用:

  • 實用程序功能(例如, pick , omit , deepClone
  • 國家管理(例如,動作,具有有效載荷類型的還原器)
  • 反應(yīng)組件(例如,形式,接受通用道具的模態(tài))
  • 數(shù)據(jù)獲取鉤子(例如, useFetch<T>()

示例:通用式鉤子

功能usefetch <t>(url:string):{數(shù)據(jù):t |無效的;加載:boolean} {
  const [data,setData] = usestate <t | null>(null);
  const [loading,setloading] = usestate(true);

  useeffect(()=> {
    提?。╱rl)
      然后(r => r.json())
      。
      .finally(()=> setloading(false));
  },[url]);

  返回{數(shù)據(jù),加載};
}

// 用法
const {data} = usefetch <user []>(“/api/users”);

在這里,相同的鉤子可以安全處理任何預(yù)期的響應(yīng)類型。


仿制藥一開始可能會感到抽象,但它們只是打字稿的方式,讓您編寫未來的代碼。一旦開始使用它們,您就會發(fā)現(xiàn)自己更少重復(fù),自信地重構(gòu)并在編譯時間捕捉錯誤。

基本上:如果您要重復(fù)針對不同類型的相同邏輯,那么該到達(dá)仿制藥了。

以上是用打字稿通用來解鎖可重復(fù)使用性的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Stock Market GPT

Stock Market GPT

人工智能驅(qū)動投資研究,做出更明智的決策

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

泛型函數(shù)在Golang中解決可變參數(shù)類型的問題嗎? 泛型函數(shù)在Golang中解決可變參數(shù)類型的問題嗎? Apr 16, 2024 pm 06:12 PM

Go中的泛型函數(shù)解決了可變參數(shù)類型的問題:泛型函數(shù)允許使用類型參數(shù),在運(yùn)行時指定。這使得編寫可以處理不同類型參數(shù)的函數(shù)成為可能。例如,Max函數(shù)是一個泛型函數(shù),它接受兩個可比較參數(shù)并返回較大值。通過使用泛型函數(shù),我們可以編寫更靈活通用的代碼,可處理不同類型的參數(shù)。

golang中泛型的具體應(yīng)用場景 golang中泛型的具體應(yīng)用場景 May 04, 2024 am 11:45 AM

泛型在Go中的應(yīng)用場景:集合操作:創(chuàng)建適用于任何類型的集合操作,例如過濾。數(shù)據(jù)結(jié)構(gòu):編寫通用的數(shù)據(jù)結(jié)構(gòu),如隊列,棧和映射,可存儲和操作各種類型的數(shù)據(jù)。算法:編寫通用的算法,如排序,搜索和歸約,可處理不同類型的數(shù)據(jù)。

Golang泛型對函數(shù)簽名和參數(shù)的影響是什么? Golang泛型對函數(shù)簽名和參數(shù)的影響是什么? Apr 17, 2024 am 08:39 AM

泛型對Go函數(shù)簽名和參數(shù)的影響包括:類型參數(shù):函數(shù)簽名可包含類型參數(shù),指定函數(shù)可使用的類型。類型約束:類型參數(shù)可具有約束,指定其必須滿足的條件。參數(shù)類型推斷:編譯器可推斷未指定類型參數(shù)的類型。指定類型:可顯式指定參數(shù)類型以調(diào)用泛型函數(shù)。這提高了代碼的可重用性和靈活性,允許編寫可與多種類型一起使用的函數(shù)和類型。

Java 枚舉類型如何與泛型配合使用? Java 枚舉類型如何與泛型配合使用? May 04, 2024 am 08:36 AM

Java中枚舉類型與泛型的結(jié)合:聲明帶泛型的枚舉時需添加尖括號,T為類型參數(shù)。創(chuàng)建泛型類時,同樣需添加尖括號,T為可存儲任何類型的類型參數(shù)。此結(jié)合提高代碼靈活性、類型安全性,并簡化代碼。

Java 函數(shù)泛型的上限和下限是什么?如何使用? Java 函數(shù)泛型的上限和下限是什么?如何使用? Apr 26, 2024 am 11:45 AM

Java函數(shù)泛型允許設(shè)置上限和下限。上限(extends)指定函數(shù)接受或返回的數(shù)據(jù)類型必須是指定類型的子類型,例如。下限(super)指定函數(shù)接受或返回的數(shù)據(jù)類型必須是指定類型的超類型,例如。泛型使用可提高代碼的可重用性和安全性。

泛型函數(shù)在Golang中的限制是什么? 泛型函數(shù)在Golang中的限制是什么? Apr 16, 2024 pm 05:12 PM

Go泛型函數(shù)的限制:僅支持類型參數(shù),不支持值參數(shù)。不支持函數(shù)遞歸。不能顯式指定類型參數(shù),由編譯器推斷。

C++模板和泛型的比較? C++模板和泛型的比較? Jun 04, 2024 pm 04:24 PM

C++中模板和泛型的區(qū)別:模板:編譯時定義,明確類型化,效率高,代碼體積小。泛型:運(yùn)行時類型化,抽象接口,提供靈活性,效率較低。

Java 泛型方法如何進(jìn)行類型推斷? Java 泛型方法如何進(jìn)行類型推斷? May 01, 2024 pm 02:45 PM

Java泛型方法可自動推斷類型參數(shù),無需明確聲明。規(guī)則包括:1.使用明確類型聲明;2.推斷單個類型;3.推導(dǎo)出通配符類型;4.推斷構(gòu)造函數(shù)返回值類型。這簡化了代碼,使其更易于編寫和使用泛型方法。

See all articles