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

目錄
工會類型:處理多種可能性
實際示例:狀態(tài)處理
交叉類型:組合類型
現(xiàn)實世界用例:混合物或配置對象
never類型:代表無法達(dá)到的狀態(tài)
1。永不返回的功能
2。在工會中進(jìn)行詳盡的檢查
如何在類型系統(tǒng)中never使用
將所有這些放在一起
概括
首頁 後端開發(fā) php教程 高級類型提示:聯(lián)合類型,交叉類型和'從不”

高級類型提示:聯(lián)合類型,交叉類型和'從不”

Jul 29, 2025 am 12:48 AM
PHP Syntax

聯(lián)合類型(A | B)允許值是幾種類型之一,從而可以靈活地處理多個輸入可能性。 2。相交類型(A&B)將多種類型組合為必須滿足所有成員的類型,可用於創(chuàng)建複雜的對象形狀。 3。永無止境的狀態(tài)代表無法訪問的狀態(tài),通常用於永無返回的詳盡檢查和功能。這些高級打字稿功能通過使無效狀態(tài)無法說明來實現(xiàn)更健壯,自我記錄和類型安全代碼。

高級類型提示:聯(lián)合類型,交叉類型和從不”

使用打字稿時,基本類型註釋僅僅是開始。要編寫更強(qiáng)大,表達(dá)和可維護(hù)的代碼,您需要超越stringnumberboolean或佈局,並利用高級類型的提示,例如聯(lián)合類型交叉點類型和特殊的never類型。這些工具可以使您對價值和功能在復(fù)雜方案中的行為方式進(jìn)行精細(xì)的控制。

讓我們用實際的例子和用例分解這些概念。


工會類型:處理多種可能性

聯(lián)合類型允許值是幾種類型之一。您可以使用垂直條( | )定義它。

讓用戶ID:字符串|數(shù)字;
UserId =“ ABC123”; //?
USERID = 123; //?

當(dāng)處理不保證類型的API,用戶輸入或舊數(shù)據(jù)時,這一點特別有用。

實際示例:狀態(tài)處理

函數(shù)getStatus(狀態(tài):“加載” |“成功” |“錯誤”){
  // ...
}
getStatus(“加載”); //?
getStatus(“待處理”); //?參數(shù)無法分配

您也可以使用具有復(fù)雜類型的工會:

鍵入user = {name:string;年齡:數(shù)字};
類型管理= {name:string;權(quán)限:字符串[]};

功能printinfo(實體:用戶| admin){
  console.log(entity.name); //兩者都存在
  // console.log(entity.age); //?錯誤:“年齡'不在管理上
}

?提示:使用類型防護(hù)措施在運行時縮小聯(lián)合類型的縮小。

如果(實體中的“年齡”){
  console.log(entity.age); //現(xiàn)在安全
}

交叉類型:組合類型

交叉類型將多種類型組合成一種。它使用&運算符,表示“此值必須滿足所有類型?!?/p>

鍵入user = {name:string;電子郵件:字符串};
類型Timestamp = {createat:date;更新:日期};

鍵入userWithTimestamp =用戶&timestamp;

const用戶:userWithTimestamp = {
  名稱:“愛麗絲”,
  電子郵件:“ alice@example.com”,
  創(chuàng)建:new Date(),
  更新:new Date(),
};

現(xiàn)實世界用例:混合物或配置對象

withID = {id:numbers};
withname = {name:string};
鍵入Active = {isActive:boolean};

鍵入帳戶= withId&withname&active;

const帳戶:帳戶= {
  ID:1,
  名稱:“專業(yè)用戶”,
  ISACTIVE:是的,
};

??對具有衝突字段的對象交叉點要小心

鍵入a = {data:string};
類型b = {data:number};
C = A&B;

const示例:C = {
  數(shù)據(jù): ? ? ? //這可能是什麼?必須是字符串和數(shù)字→不可能→`從不
};

這導(dǎo)致我們……


never類型:代表無法達(dá)到的狀態(tài)

never類型代表永遠(yuǎn)不會發(fā)生的值。它在兩種主要情況下使用:

  1. 永不返回的功能
  2. 由於類型變窄而無法存在的值

1。永不返回的功能

函數(shù)throwerror(消息:字符串):從不{
  投擲新錯誤(消息);
}

此函數(shù)不僅返回void ,而且永遠(yuǎn)不會返回。 Typescript使用never對此進(jìn)行建模。

2。在工會中進(jìn)行詳盡的檢查

never的經(jīng)典使用是確保在聯(lián)盟中處理所有案件:

類型模式=“ Dark” | “光” | “汽車”;

函數(shù)getTheme(模式:模式){
  開關(guān)(模式){
    案例“黑暗”:
      返回“黑色”;
    案例“輕”:
      返回“白色”;
    案例“自動”:
      返回窗口。 prefersdark? “黑”:“白色”;
    預(yù)設(shè):
      //如果涵蓋了所有情況,``模式''將``從不
      const _exhaustivecheck:never = mode;
      返回_EXHAUSTIVECHECK;
  }
}

如果您以後為Mode添加新值,但忘記處理它,則此行會丟棄類型錯誤,從而幫助您捕獲不完整的邏輯。

如何在類型系統(tǒng)中never使用

  • never是底部類型 - 它可以分配給任何類型。
  • 但是,任何類型都不能分配為never (除非never除外)。
  • 當(dāng)可能性耗盡時,它會在類型縮小期間出現(xiàn)。
函數(shù)handlevalue(x:string | number){
  if(typeof x ===“字符串”){
    // x是字符串
  } else if(typeof x ===“ number”){
    // x是號碼
  } 別的 {
    // x是``永不'' - 沒有其他可能性
    const出現(xiàn):永不= x;
    提出新的錯誤(`意外值:$ {意外}`);
  }
}

將所有這些放在一起

想像一下建立表單驗證系統(tǒng):

鍵入成功= {成功:true;數(shù)據(jù):字符串};
類型失敗= {成功:false;錯誤:字符串};
類型結(jié)果=成功與失??; //等等 - 什麼?

//這沒有意義。反而:
鍵入驗證=成功|失敗;

函數(shù)iSvalid(輸入:字符串):驗證result {
  if(input.length> 0){
    返回{成功:true,數(shù)據(jù):輸入};
  } 別的 {
    返回{成功:false,錯誤:“空輸入”};
  }
}

//然後,安全處理結(jié)果:
函數(shù)processResult(res:validationResult){
  如果(res.success){
    console.log(“ data:”,res.data); //?類型是成功
  } 別的 {
    console.log(“錯誤:”,res.error); //?類型是失敗
  }
}

在這裡,聯(lián)合類型啟用有條件的鍵入,打字稿根據(jù)success字段縮小了類型。


概括

  • 聯(lián)合類型( A | B :值AB-非常適合靈活輸入。
  • 相交類型( A & B :值必須既是A and B) - 可用於組合特徵。
  • never :代表不可能或無法達(dá)到的狀態(tài) - 對於詳盡的檢查和錯誤功能所必需的。

這些高級類型功能通過使無效狀態(tài)無法說明來幫助您編寫更安全的代碼。一旦您對它們感到滿意,您的打字稿不僅會鍵入 - 它會變得自我記錄自我保護(hù)。

基本上,這就是您從基本註釋到真正強(qiáng)大的類型建模的升級方式。

以上是高級類型提示:聯(lián)合類型,交叉類型和'從不”的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

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)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
PHP 8屬性的簡介:用結(jié)構(gòu)化元數(shù)據(jù)代替DocBlocks PHP 8屬性的簡介:用結(jié)構(gòu)化元數(shù)據(jù)代替DocBlocks Jul 25, 2025 pm 12:27 PM

php8attributesreplaceplacecblocksformetAdataByProvidingType-safe,nenativeSuppportedAnnotations.1.AttriButesRedEarsedefinedused#[attribute] [attribute]和cantargetClasses,方法,方法,屬性等

PHP語法容易嗎? PHP語法容易嗎? Jul 17, 2025 am 04:12 AM

是的,phpsyntaxiseasy,尤其是forbeginners,因為炎是可見的,可以整合willwithhtml,andrequiresminimalsetup.itssyntaxisstraightforward,允許使用$ forvariobles,semicolonsolonsolonsolonsolonsolonsolonsolonforstatements,允許directembedectembedembedectembedembedembedembednothtmlwithtags

掌握PHP陣列破壞性和傳播操作員 掌握PHP陣列破壞性和傳播操作員 Jul 25, 2025 am 04:44 AM

PHP的數(shù)組解構(gòu)和展開運算符可通過簡潔語法提升代碼可讀性與靈活性。 1.數(shù)組解構(gòu)支持從索引和關(guān)聯(lián)數(shù)組中提取值,如[$first,$second]=$colors可分別賦值;可通過空佔位符跳過元素,如[,,$third]=$colors;關(guān)聯(lián)數(shù)組解構(gòu)需用=>匹配鍵,如['name'=>$name]=$user,支持重命名變量和設(shè)置默認(rèn)值以應(yīng)對缺失鍵。 2.展開運算符(...)可將數(shù)組展開合併,如[...$colors,'blue'],支持多數(shù)組合併及關(guān)聯(lián)數(shù)組覆蓋,但後續(xù)鍵會覆蓋前者,且不重

利用現(xiàn)代PHP中的命名論證和構(gòu)造屬性促進(jìn) 利用現(xiàn)代PHP中的命名論證和構(gòu)造屬性促進(jìn) Jul 24, 2025 pm 10:28 PM

php8.0'snameDargumentsAndConstructorPropertyPromotionimprovecodeclarityAndReduceBoilerplate:1.1.NamedArgumentsLetyOupSparameTersByname,增強(qiáng)可讀性和可讀取性andallowingFlexibleOrder; 2.ConstructorpropertyProperpropyPropyPromotyPromotionautomotationalomationalomatialicallicallialicalCeratesandassandassAssAssAssAssAsspropertiessiessiespropertiessiessiessiessiessiessiessiessiessiessiessies

靜態(tài)與自我:PHP中的晚期靜態(tài)綁定 靜態(tài)與自我:PHP中的晚期靜態(tài)綁定 Jul 26, 2025 am 09:50 AM

當(dāng)在繼承中使用self調(diào)用靜態(tài)方法時,它始終指向定義方法的類,而非實際調(diào)用的類,導(dǎo)致無法按預(yù)期調(diào)用子類重寫的方法;而static採用後期靜態(tài)綁定,能在運行時正確解析到實際調(diào)用的類。 1.self是早期綁定,指向代碼所在類;2.static是後期綁定,指向運行時調(diào)用類;3.使用static可實現(xiàn)靜態(tài)工廠方法,自動返回子類實例;4.static支持方法鏈中繼承屬性的正確解析;5.LSB僅適用於靜態(tài)方法和屬性,不適用於常量;6.在可繼承的類中應(yīng)優(yōu)先使用static以提升靈活性和可擴(kuò)展性,該做法在現(xiàn)代PH

php匿名函數(shù)與箭頭函數(shù):語法深度潛水 php匿名函數(shù)與箭頭函數(shù):語法深度潛水 Jul 25, 2025 pm 04:55 PM

箭頭函數(shù)適用於單一表達(dá)式、簡單回調(diào)和提升可讀性的場景;2.匿名函數(shù)適用於多行邏輯、複雜控制流、引用外部變量和使用yield生成器的場景;因此應(yīng)根據(jù)具體需求選擇:簡單場景優(yōu)先使用箭頭函數(shù)以提高代碼簡潔性,複雜場景則使用匿名函數(shù)以獲得完整功能支持。

了解php中的變異功能和參數(shù)解開。 了解php中的變異功能和參數(shù)解開。 Jul 25, 2025 am 04:50 AM

PHP的可變函數(shù)和參數(shù)解包通過splat操作符(...)實現(xiàn),1.可變函數(shù)使用...$params收集多個參數(shù)為數(shù)組,必須位於參數(shù)列表末尾,可與必需參數(shù)共存;2.參數(shù)解包使用...$array將數(shù)組展開為獨立參數(shù)傳入函數(shù),適用於數(shù)值索引數(shù)組;3.兩者可結(jié)合使用,如在包裝函數(shù)中傳遞參數(shù);4.PHP8 支持解包關(guān)聯(lián)數(shù)組時匹配具名參數(shù),需確保鍵名與參數(shù)名一致;5.注意避免對非可遍歷數(shù)據(jù)使用解包,防止致命錯誤,並註意參數(shù)數(shù)量限制。這些特性提升了代碼靈活性和可讀性,減少了對func_get_args()等

揭開PHP的三元,無效合併和無效操作員 揭開PHP的三元,無效合併和無效操作員 Jul 25, 2025 pm 04:48 PM

Theternaryoperator(?:)isusedforsimpleif-elselogic,returningoneoftwovaluesbasedonacondition;2.Thenullcoalescingoperator(??)returnstheleftoperandifitisnotnullorundefined,otherwisetherightoperand,makingitidealforsettingdefaultswithoutbeingaffectedbyfals

See all articles