」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Node.js 沒有實作 TypeScript

Node.js 沒有實作 TypeScript

發佈於2024-11-01
瀏覽:687

Node.js did not implement TypeScript

一篇關於 Node.js 沒有實作 TypeScript 的原因的簡短文章。

首先要事

接下來是 Node.js 中關於 TypeScript 的已經尚未完成的解釋。

本文無意批評 Node.js 團隊或 TypeScript 團隊。

事實上,恰恰相反。

我認真地認為 Node.js 團隊在按照他們的方式「實現」TypeScript 方面做出了最佳選擇。

我在這裡真正強調的是 Node.js 沒有實作 TypeScript。他們只是添加了某種支持。我認為這是一個重要的區別,在 Node.js 和 TypeScript 的討論中經常被忽略。

在過去的幾周里,我統計了我讀過的電子報中引用的 50 多篇文章提到 Node.js 實作了 TypeScript。

我認為是時候徹底澄清這一點了。

劇透警告:Node.js 未實作 TypeScript。

TypeScript:簡史和一些數據

2010 年,微軟發布了 TypeScript,這是 JavaScript 的超集,為該語言添加了靜態類型。 TypeScript 旨在解決 JavaScript 的一些缺點,例如缺乏類型安全性和維護大型程式碼庫的困難。自發布以來,TypeScript 受到了開發人員的歡迎,許多專案都採用它作為主要語言。

根據最新的 JS 現狀調查,TypeScript 幾乎無所不在。 78% 的開發人員至少 50% 的開發時間都在使用 TypeScript,因此難怪 「Node.js 實現了 TypeScript」 的迴聲甚至到達了 Web 最深刻的角落。

但是,需要澄清的是,這並沒有發生。它可能永遠不會。

問題

Node.js 沒有實作 TypeScript 有幾個原因。以下是我認為最重要的兩個:

#1:TypeScript 在運行時注入東西。

你知道枚舉在運行時會變成什麼嗎?一個對象。

幸運的是,這只是 TypeScript 如何在運行時注入東西的幾個例子之一。這對於 Node.js 來說是一個問題,因為這意味著運行時必須了解 TypeScript 的功能,這會帶來大量的複雜性和開銷。

如果 Node.js 希望保持與 ECMAScript 的一致性,並且在其餘下的存在中不必處理依賴關係管理,則它不能接受 TypeScript 作為當前形式的依賴關係。

#2:語意版本控制。

TypeScript 不遵循語意版本控制 (semver)。

另一方面,Node.js 嚴格遵循 semver,並有三個不同的發行版(目前,我們有 18.x、20.x、22.x)。這意味著可以在次要版本或補丁版本中引入重大更改,這可能會導致現有程式碼的相容性問題。

此外,支援的平台數量龐大,因此控制一切並不容易。

Node.js 根本無法接受 TypeScript 作為依賴項,因為它會破壞 semver。這是阻止 Node.js 實作 TypeScript 的一個根本問題。

那麼,他們做了什麼?

這就是混亂出現的地方。 Node.js 沒有實作 TypeScript,但他們確實在實驗性標誌下添加了類型剝離。此功能允許開發人員編寫 TypeScript 程式碼並將其編譯為 JavaScript,而無需類型資訊。這是一種妥協,允許開發者在 Node.js 中使用 TypeScript,而不會引入上述問題。

你想要一個例子嗎?幹得好:

function sum(a: number, b: number): number {
  return a   b;
}

這個函數,當使用 --experimental-strip-types 標誌編譯時,就會變成:

function sum(a        , b        )         {
  return a   b;
}

你看到了嗎?類型消失了,並被空格取代。 但是,為什麼? ,您可能會問。好吧,因為這樣做可以保留來源映射引用,而無需為這些引用進行單獨的建置過程。

在內部,這是透過一個名為 amaro 的套件來完成的,它包裝了 swc——一個著名的建造工具,它執行實際的剝離。

當然,限制是存在的,例如無法使用 TypeScript 特定的功能,如前面提到的 enums。但是,這仍然是向前邁出的一大步,可以防止人們編寫 135 個設定檔來使 sum 函數接受兩個數字並傳回第三個數字。

再見,
麥可。

版本聲明 本文轉載於:https://dev.to/cadienvan/nodejs-did-not-implement-typescript-1k4p?1如有侵犯,請聯繫[email protected]刪除
最新教學 更多>
  • Go web應用何時關閉數據庫連接?
    Go web應用何時關閉數據庫連接?
    在GO Web Applications中管理數據庫連接很少,考慮以下簡化的web應用程序代碼:出現的問題:何時應在DB連接上調用Close()方法? ,該特定方案將自動關閉程序時,該程序將在EXITS EXITS EXITS出現時自動關閉。但是,其他考慮因素可能保證手動處理。 選項1:隱式關閉終...
    程式設計 發佈於2025-04-29
  • 如何使用PHP將斑點(圖像)正確插入MySQL?
    如何使用PHP將斑點(圖像)正確插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call fil...
    程式設計 發佈於2025-04-29
  • PHP與C++函數重載處理的區別
    PHP與C++函數重載處理的區別
    作為經驗豐富的C開發人員脫離謎題,您可能會遇到功能超載的概念。這個概念雖然在C中普遍,但在PHP中構成了獨特的挑戰。讓我們深入研究PHP功能過載的複雜性,並探索其提供的可能性。 在PHP中理解php的方法在PHP中,函數超載的概念(如C等語言)不存在。函數簽名僅由其名稱定義,而與他們的參數列表無關...
    程式設計 發佈於2025-04-29
  • React.js面試必備問題及答案第4集
    React.js面試必備問題及答案第4集
    分享我的最新視頻,其中分解了鑰匙react.js訪談的問題和答案,這些問題和答案將幫助您像Pro一樣準備!無論您只是從反應開始還是尋求提高技能,該視頻都可以適合所有人。 ?在此視頻中,我將指導您解決最常見的React訪談問題,並提供答案,可以幫助您理解關鍵概念並在下一次面試中脫穎而出。無論您是初...
    程式設計 發佈於2025-04-29
  • 在JavaScript中如何獲取實際渲染的字體,當CSS字體屬性未定義時?
    在JavaScript中如何獲取實際渲染的字體,當CSS字體屬性未定義時?
    Accessing Actual Rendered Font when Undefined in CSSWhen accessing the font properties of an element, the JavaScript object.style.fontFamily and objec...
    程式設計 發佈於2025-04-29
  • 如何在php中使用捲髮發送原始帖子請求?
    如何在php中使用捲髮發送原始帖子請求?
    如何使用php 創建請求來發送原始帖子請求,開始使用curl_init()開始初始化curl session。然後,配置以下選項: curlopt_url:請求 [要發送的原始數據指定內容類型,為原始的帖子請求指定身體的內容類型很重要。在這種情況下,它是文本/平原。要執行此操作,請使用包含以下標頭...
    程式設計 發佈於2025-04-29
  • 為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    使用php dateTime修改月份:發現預期的行為在使用PHP的DateTime類時,添加或減去幾個月可能並不總是會產生預期的結果。正如文檔所警告的那樣,“當心”這些操作的“不像看起來那樣直觀。 考慮文檔中給出的示例:這是內部發生的事情: 現在在3月3日添加另一個月,因為2月在2001年只有2...
    程式設計 發佈於2025-04-29
  • 如何避免Go語言切片時的內存洩漏?
    如何避免Go語言切片時的內存洩漏?
    ,a [j:] ...雖然通常有效,但如果使用指針,可能會導致內存洩漏。這是因為原始的備份陣列保持完整,這意味著新切片外部指針引用的任何對象仍然可能佔據內存。 copy(a [i:] 對於k,n:= len(a)-j i,len(a); k
    程式設計 發佈於2025-04-29
  • 如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    為有效的slug生成首先,該函數用指定的分隔符替換所有非字母或數字字符。此步驟可確保slug遵守URL慣例。隨後,它採用ICONV函數將文本簡化為us-ascii兼容格式,從而允許更廣泛的字符集合兼容性。 接下來,該函數使用正則表達式刪除了不需要的字符,例如特殊字符和空格。此步驟可確保slug僅包...
    程式設計 發佈於2025-04-29
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    在java 中有效地替換多個substring,需要在需要替換一個字符串中的多個substring的情況下,很容易求助於重複應用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    程式設計 發佈於2025-04-29
  • 全面指南:測試數據管理的奧秘
    全面指南:測試數據管理的奧秘
    [2 为什么测试数据管理对于现代开发至关重要 在今天快节奏的软件开发环境中,测试数据管理(TDM)在确保测试过程中的质量,速度和效率方面起着关键作用。随着企业争取更快的发行和更好的软件质量,有效管理测试数据比以往任何时候都变得更加重要。 [2 测试数据管理是指创建,管理和维护用于测试软件应用程序的数...
    程式設計 發佈於2025-04-29
  • 如何在其容器中為DIV創建平滑的左右CSS動畫?
    如何在其容器中為DIV創建平滑的左右CSS動畫?
    通用CSS動畫,用於左右運動 ,我們將探索創建一個通用的CSS動畫,以向左和右移動DIV,從而到達其容器的邊緣。該動畫可以應用於具有絕對定位的任何div,無論其未知長度如何。 問題:使用左直接導致瞬時消失 更加流暢的解決方案:混合轉換和左 [並實現平穩的,線性的運動,我們介紹了線性的轉換。...
    程式設計 發佈於2025-04-29
  • 在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在C中的顯式刪除 在C中的動態內存分配時,開發人員通常會想知道是否需要手動調用“ delete”操作員在heap-exprogal exit exit上。本文深入研究了這個主題。 在C主函數中,使用了動態分配變量(HEAP內存)的指針。當應用程序退出時,此內存是否會自動發布?通常,是。但是,即使在...
    程式設計 發佈於2025-04-29
  • 在Java中如何為PNG文件添加坐標軸和標籤?
    在Java中如何為PNG文件添加坐標軸和標籤?
    如何用java 在現有png映像中添加軸和標籤的axes和labels如何註釋png文件可能具有挑戰性。與其嘗試可能導致錯誤和不一致的修改,不如建議在圖表創建過程中集成註釋。 使用JFReechArt import java.awt.color; 導入java.awt.eventqueue; 導...
    程式設計 發佈於2025-04-29
  • 如何使用“ JSON”軟件包解析JSON陣列?
    如何使用“ JSON”軟件包解析JSON陣列?
    parsing JSON與JSON軟件包 QUALDALS:考慮以下go代碼:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    程式設計 發佈於2025-04-29

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3