TL;DR;
純JavaScript介面模擬,利用VS Code IntelliSense的程式碼分析功能,可稱為技巧。透過物件工廠和空函數巧妙結合,實現類似介面的程式碼提示和類型檢查,並利用空值合併運算子(??)簡化程式碼。生產環境中需使用建置腳本移除不必要的介面程式碼。
以下是一個純JavaScript介面的範例,它依賴VS Code IntelliSense之類的程式碼編輯器中的程式碼分析,所以也可以稱之為技巧:
var interface = () => null; var InterfaceOptions = () => ({ name: '', }); InterfaceOptions = interface; // 使用示例 // ===== let opt = InterfaceOptions`` ?? { name: 'Bagel', }; function createItem(options = InterfaceOptions``) { // ... } createItem(opt);
以下是純JavaScript中重新命名屬性的範例:
你建立了一個物件工廠,它會初始化屬性的程式碼分析,然後用一個傳回null的函數取代該物件。這使得可以使用空值合併運算子(??)進行一些聲明技巧,使你的程式碼保持整潔。
它也適用於陣列!請參閱下面瑣事 #4部分中的範例程式碼。
發現過程
- 我希望VS Code IntelliSense能夠提示
createBox()
選項的屬性。
- 使用預設參數有效,但我希望將其放在其他地方以減少混亂。
- 在函數外部聲明選項會產生錯誤,因為任何人都可以修改其值。
- 所以它必須是一個物件工廠。在第5行,我使用反引號而不是括號來區分「介面」和函數呼叫。實際上,為了這篇文章,我應該只為變數名稱使用一個唯一的名稱前綴,例如
InterfaceBoxOptions
之類的,好吧!
- 好吧,這有效,但是如果我將選項聲明為它們自己的變數呢?我該如何告訴IntelliSense一個物件具有介面的屬性?
- 你可能知道,如果我先將介面分配給對象,IntelliSense會假設介面屬性。
- 令我驚訝的是,即使在用一個新物件重新賦值變數後,它仍然有效。
- 但那多了一行。除非它是一行程式碼,否則我不會接受它!但是可以嗎?
- 答案是肯定的,使用空值合併(??)運算子。這是我找到的唯一方法。但是,要分配新物件而不是接口,我需要以某種方式使
boxOptions
返回null。
- 幸運的是——或者可能是故意設計的——即使在將其重新賦值給返回null的函數(第5行)後,IntelliSense仍然會提示介面的初始屬性。
就這樣,我在純JavaScript中得到了一個有效的類似介面的設定。可能應該從一開始就使用TypeScript,但我屬於蠻荒西部。
生產環境
對於物件聲明,我編寫了一個建置腳本,在將其傳遞給Terser之前替換interfaceName ??
為空字串,因為壓縮器不會判斷合併傳回的null值。
之前:
var interface = () => null; var InterfaceOptions = () => ({ name: '', }); InterfaceOptions = interface; // 使用示例 // ===== let opt = InterfaceOptions`` ?? { name: 'Bagel', }; function createItem(options = InterfaceOptions``) { // ... } createItem(opt);
之後:
let opt = InterfaceOptions`` ?? { name: null, };
如果你不刪除介面部分,壓縮後的程式碼可能如下圖:
let opt = { name: null, };
瑣事
1. 為介面使用var
對於接口,你應該使用var
而不是let
或const
。這確保了在使用Terser在頂層壓縮時將其刪除。
let opt = (() => null)() ?? { name: null, };
var interface = () => null; var InterfaceOptions = () => ({ name: null, }); InterfaceOptions = interface;
Terser問題#572:刪除僅被賦值但從未讀取的變數。
2. 空介面替代方案
如果全域介面函數不可用,例如,如果你正在為其他人編寫函式庫,則可以這樣做:
// terser 选项 { toplevel: true, compress: true, // ... }
3. 在介面中使用介面
如果你還沒弄清楚,以下是如何操作:
var interface = () => null; var InterfaceOptions = () => ({ name: '', }); InterfaceOptions = interface; // 使用示例 // ===== let opt = InterfaceOptions`` ?? { name: 'Bagel', }; function createItem(options = InterfaceOptions``) { // ... } createItem(opt);
不錯,對吧?
4. 它適用於陣列嗎?
是的,但是你需要為陣列建立一個單獨的介面才能讓IntelliSense正常運作。我會說這相當混亂。
範例1:
let opt = InterfaceOptions`` ?? { name: null, };
但它確實有好處。現在你知道要加到陣列中的內容了!
範例2:
let opt = { name: null, };
5. 它可以遞歸地工作嗎?
像這樣?不,程式碼分析會為此特定物件中斷。
但是你可以這樣做:
let opt = (() => null)() ?? { name: null, };
所有圖片都已保留,並使用了與原文相同的格式。 由於無法直接處理圖片URL,我保留了原文中的/uploads/...
路徑。 請確保這些路徑在你的環境中是正確的。
以上是Vanilla JavaScript 與 VS Code IntelliSense 的接口的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!