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

目次
1. TypeScript 類型基礎(chǔ)與運(yùn)行時(shí)行為
2. 運(yùn)行時(shí)獲取值的替代方案
2.1 使用常量聲明字符串字面量
2.2 使用對(duì)象存儲(chǔ)字面量值
3. 注意事項(xiàng)與最佳實(shí)踐
4. 總結(jié)
ホームページ ウェブフロントエンド jsチュートリアル TypeScript の型と実行時(shí)の値: 深い理解と実踐

TypeScript の型と実行時(shí)の値: 深い理解と実踐

Oct 16, 2025 pm 11:06 PM

TypeScript 類型與運(yùn)行時(shí)值:深入理解與實(shí)踐

TypeScript 類型主要用于編譯時(shí)進(jìn)行類型檢查,并在編譯為 JavaScript 后被擦除,因此無(wú)法在運(yùn)行時(shí)直接作為值訪問(wèn)。若需在運(yùn)行時(shí)獲取或使用字面量值,應(yīng)采用 const 常量或?qū)ο髮傩詠?lái)存儲(chǔ)這些值,并通過(guò) typeof 操作符輔助推導(dǎo)類型,從而在保證類型安全的同時(shí),實(shí)現(xiàn)運(yùn)行時(shí)值的訪問(wèn)。

1. TypeScript 類型基礎(chǔ)與運(yùn)行時(shí)行為

TypeScript 的核心價(jià)值在于其強(qiáng)大的靜態(tài)類型系統(tǒng),它允許開(kāi)發(fā)者在代碼編寫階段捕獲潛在的類型錯(cuò)誤。type 關(guān)鍵字用于聲明類型別名,它本質(zhì)上是一種編譯時(shí)構(gòu)造,僅用于提供類型信息,幫助編譯器進(jìn)行檢查。例如:

type CardType = 'InformationCard';

這里的 CardType 聲明了一個(gè)字符串字面量類型 'InformationCard'。在 TypeScript 代碼被編譯成純 JavaScript 后,所有的類型信息都會(huì)被“擦除” (Type Erasure),這意味著在運(yùn)行時(shí),這些類型聲明將不復(fù)存在。因此,嘗試在運(yùn)行時(shí)直接訪問(wèn)一個(gè) type 聲明,例如 console.log(CardType),是不可行的,因?yàn)?CardType 在 JavaScript 運(yùn)行時(shí)環(huán)境中并沒(méi)有對(duì)應(yīng)的實(shí)體。

2. 運(yùn)行時(shí)獲取值的替代方案

由于類型在運(yùn)行時(shí)不可用,如果我們需要在運(yùn)行時(shí)獲取或使用一個(gè)特定的字面量值(例如上述的 'InformationCard'),我們需要將其存儲(chǔ)在一個(gè) JavaScript 運(yùn)行時(shí)可訪問(wèn)的實(shí)體中,如 const 變量或?qū)ο髮傩浴?/p>

2.1 使用常量聲明字符串字面量

最直接的方法是使用 const 關(guān)鍵字聲明一個(gè)常量來(lái)存儲(chǔ)所需的字符串字面量。這樣,這個(gè)值在運(yùn)行時(shí)是可訪問(wèn)的。

// 定義一個(gè)常量,其值在運(yùn)行時(shí)可用
const CARD_TYPE_VALUE = 'InformationCard';

console.log(CARD_TYPE_VALUE); // 輸出: InformationCard

// 可以在類型定義中引用這個(gè)常量的值類型,以保持類型一致性
type MyCardType = typeof CARD_TYPE_VALUE; // MyCardType 的類型是 'InformationCard'

function processCard(type: MyCardType) {
    console.log(`處理卡片類型: ${type}`);
}

processCard(CARD_TYPE_VALUE); // 正確
// processCard('OtherCard'); // 編譯錯(cuò)誤,因?yàn)?'OtherCard' 不是 MyCardType

這種方法清晰地分離了類型定義和值定義,同時(shí)通過(guò) typeof 確保了類型與值的關(guān)聯(lián)性。

2.2 使用對(duì)象存儲(chǔ)字面量值

當(dāng)需要管理一組相關(guān)的字面量值時(shí),將它們作為對(duì)象的屬性來(lái)存儲(chǔ)是一種常見(jiàn)的做法。這種方式不僅可以在運(yùn)行時(shí)訪問(wèn)這些值,還能提供更好的組織結(jié)構(gòu)。

// 定義一個(gè)對(duì)象,其屬性值在運(yùn)行時(shí)可用
const CardConstants = {
    informationCard: "InformationCard",
    warningCard: "WarningCard",
    // 更多卡片類型...
} as const; // 使用 'as const' 斷言,將屬性值推斷為字面量類型

console.log(CardConstants.informationCard); // 輸出: InformationCard

// 從對(duì)象屬性中提取類型,創(chuàng)建聯(lián)合類型
type AvailableCardType = typeof CardConstants[keyof typeof CardConstants];
// AvailableCardType 的類型是 "InformationCard" | "WarningCard"

function displayCard(type: AvailableCardType) {
    console.log(`顯示卡片類型: ${type}`);
}

displayCard(CardConstants.informationCard); // 正確
// displayCard("UnknownCard"); // 編譯錯(cuò)誤

使用 as const 斷言是一個(gè)重要的技巧,它告訴 TypeScript 將對(duì)象中的每個(gè)屬性值推斷為其最窄的字面量類型(例如,"InformationCard" 而不是 string),這對(duì)于創(chuàng)建精確的聯(lián)合類型至關(guān)重要。

3. 注意事項(xiàng)與最佳實(shí)踐

  • 明確區(qū)分類型與值: 始終記住 type 聲明僅存在于編譯時(shí),而 const 聲明或?qū)ο髮傩詣t在運(yùn)行時(shí)持有實(shí)際的值。

  • 利用 typeof 運(yùn)算符: typeof 運(yùn)算符在 TypeScript 中有兩種用法。當(dāng)它用于表達(dá)式時(shí),它返回一個(gè)字符串,表示表達(dá)式的數(shù)據(jù)類型(如 JavaScript 的 typeof)。當(dāng)它用于類型上下文時(shí),它用于獲取變量或?qū)傩缘?TypeScript 類型。這是將運(yùn)行時(shí)值與編譯時(shí)類型關(guān)聯(lián)起來(lái)的關(guān)鍵。

  • 枚舉類型 (Enums): 對(duì)于一組相關(guān)的常量,TypeScript 的 enum 類型也是一個(gè)可行的選擇。枚舉成員既可以作為類型使用,也可以作為運(yùn)行時(shí)值使用。

    enum CardEnum {
        Information = 'InformationCard',
        Warning = 'WarningCard',
    }
    
    console.log(CardEnum.Information); // 輸出: InformationCard
    
    function processCardByEnum(type: CardEnum) {
        console.log(`處理枚舉卡片類型: ${type}`);
    }
    
    processCardByEnum(CardEnum.Warning); // 正確

    然而,在現(xiàn)代 TypeScript 開(kāi)發(fā)中,as const 斷言的對(duì)象字面量通常比 enum 更受青睞,因?yàn)樗峁┝烁`活的類型推斷和更小的編譯產(chǎn)物。

4. 總結(jié)

在 TypeScript 中,類型聲明(如 type 別名)是編譯時(shí)概念,它們?cè)谶\(yùn)行時(shí)會(huì)被擦除。因此,我們不能直接從 type 聲明中獲取運(yùn)行時(shí)值。要實(shí)現(xiàn)運(yùn)行時(shí)對(duì)特定字面量值的訪問(wèn),我們需要將這些值存儲(chǔ)在 JavaScript 運(yùn)行時(shí)可用的實(shí)體中,例如 const 常量或?qū)ο蟮膶傩?。通過(guò)結(jié)合使用 const 聲明和 typeof 類型運(yùn)算符,我們可以在保持嚴(yán)格類型檢查的同時(shí),有效地管理和使用運(yùn)行時(shí)值,從而編寫出既健壯又靈活的 TypeScript 代碼。

以上がTypeScript の型と実行時(shí)の値: 深い理解と実踐の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Stock Market GPT

Stock Market GPT

AIを活用した投資調(diào)査により賢明な意思決定を?qū)g現(xiàn)

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

JavaScriptは、クリックスルーイメージの切り替え効果を?qū)g現(xiàn)します:プロフェッショナルチュートリアル JavaScriptは、クリックスルーイメージの切り替え効果を?qū)g現(xiàn)します:プロフェッショナルチュートリアル Sep 18, 2025 pm 01:03 PM

この記事では、JavaScriptを使用して畫像をクリックする効果を?qū)g現(xiàn)する方法を紹介します。コアのアイデアは、HTML5のデータ - *屬性を使用して、代替畫像パスを保存し、JavaScriptを介してクリックイベントをリッスンし、SRC屬性を動(dòng)的に切り替えて、畫像の切り替えを?qū)g現(xiàn)することです。この記事では、詳細(xì)なコードの例と説明を提供して、この一般的に使用されるインタラクティブ効果を理解し、習(xí)得するのに役立ちます。

JavaScriptでGeolocation APIを使用してユーザーの位置を取得するにはどうすればよいですか? JavaScriptでGeolocation APIを使用してユーザーの位置を取得するにはどうすればよいですか? Sep 21, 2025 am 06:19 AM

まず、ブラウザがGeolocationapiをサポートしているかどうかを確認(rèn)します。サポートされている場(chǎng)合は、getCurrentPosition()を呼び出してユーザーの現(xiàn)在の位置座標(biāo)を取得し、成功したコールバックを通じて緯度と経度の値を取得します。同時(shí)に、拒否許可、場(chǎng)所の利用不能、タイムアウトなどのエラーコールバック処理の例外を提供します。また、高精度を有効にするために構(gòu)成オプションを渡し、タイムアウト時(shí)間とキャッシュの妥當(dāng)性期間を設(shè)定することもできます。プロセス全體には、ユーザー承認(rèn)と対応するエラー処理が必要です。

Nuxt 3組成APIについて説明しました Nuxt 3組成APIについて説明しました Sep 20, 2025 am 03:00 AM

NUXT3の構(gòu)成APIコア使用量には次のものが含まれます。1。DefinePageMetaは、タイトル、レイアウト、ミドルウェアなどのページメタ情報(bào)を定義するために使用されます。 2。Useheadは、ページヘッダータグを管理し、靜的およびレスポンシブな更新をサポートし、SEO最適化を?qū)g現(xiàn)するためにDefinePageMetaと協(xié)力する必要があります。 3. useasyncdataは、非同期データを安全に取得し、負(fù)荷とエラーステータスを自動(dòng)的に処理し、サーバーとクライアントのデータ収集制御をサポートします。 4. usefetchは、useasyncdataと$ fetchのカプセル化であり、リクエストキーを自動(dòng)的にエンスして、リクエストを重複しないようにします

javascriptでsetintervalで繰り返し間隔を作成する方法 javascriptでsetintervalで繰り返し間隔を作成する方法 Sep 21, 2025 am 05:31 AM

JavaScriptに繰り返し間隔を作成するには、SetInterval()関數(shù)を使用する必要があります。これは、指定されたミリ秒間隔で関數(shù)またはコードブロックを繰り返し実行する必要があります。たとえば、setinterval(()=> {console.log( "2秒ごとに実行");}、2000)は、clearinterval(intervalid)によってクリアされるまで2秒ごとにメッセージを出力します。実際のアプリケーションでは、クロック、投票サーバーなどを更新するために使用できますが、最小遅延制限と機(jī)能実行時(shí)間の影響に注意を払い、メモリの漏れを避けるために不要になった時(shí)間の間隔をクリアします。特にコンポーネントのアンインストールまたはページの閉鎖の前に、それを確認(rèn)してください

JavaScriptのクリップボードにテキストをコピーする方法は? JavaScriptのクリップボードにテキストをコピーする方法は? Sep 18, 2025 am 03:50 AM

ClipboardapiのWriteTextメソッドを使用してテキストをクリップボードにコピーします。セキュリティコンテキストとユーザーインタラクションで呼び出され、最新のブラウザーをサポートし、古いバージョンをExecCommandで格下げできます。

JavaScriptでマルチライン文字列を作成する方法は? JavaScriptでマルチライン文字列を作成する方法は? Sep 20, 2025 am 06:11 AM

thebestatatororeAteamulti-linestringinjavascriptsisingsisingSemplatalalswithbackticks、whitherverebreakenexactlyaswritten。

JavaScriptですぐに呼び出された関數(shù)式(IIFE)を作成して使用する方法 JavaScriptですぐに呼び出された関數(shù)式(IIFE)を作成して使用する方法 Sep 21, 2025 am 05:04 AM

Aniife(即座に侵入すること)は、runsassonasitiondedived、cureated createdAfctionAfunctionSaNdimeSaNdiElyIntyinvokingit、cureatedglobalnamespacepollution、およびcopeThecopethrughtosures; itiswritted(function(){/cod

JSON文字列をJavaScriptオブジェクトに解析する方法 JSON文字列をJavaScriptオブジェクトに解析する方法 Sep 21, 2025 am 05:43 AM

JSON文字列をJavaScriptオブジェクトに解析するには、有効なJSON文字列を?qū)潖辘工隞avaScriptオブジェクトに変換できるjson.parse()メソッドを使用する必要があります。したがって、例外を処理するためにtry ... catchを使用する必要があります。同時(shí)に、日付文字列を日付オブジェクトに変換するなど、2番目のパラメーターのリバイバー関數(shù)を介して解析中に値を変換し、それにより安全で信頼性の高いデータ変換を?qū)g現(xiàn)できます。

See all articles