微軟發(fā)布 TypeScript 5.6:完善空值合并和真值檢查

[日期:2024-09-13] 作者:故淵 次瀏覽 [字體: ]

微軟發(fā)布 TypeScript 5.6:完善空值合并和真值檢查

2024/9/10 8:51:59 來(lái)源:IT之家 作者:故淵 責(zé)編:故淵評(píng)論:47

IT之家 9 月 10 日消息,微軟公司昨日(9 月 9 日)發(fā)布博文,宣布推出 TypeScript 5.6 正式版,主要進(jìn)一步完善空值合并與真值檢查,支持禁用類型檢查等等。


TypeScript 簡(jiǎn)介

IT之家注:TypeScript 是一種在 JavaScript 基礎(chǔ)上通過(guò)添加類型語(yǔ)法構(gòu)建的語(yǔ)言。


類型(Types)用于描述開(kāi)發(fā)者對(duì)變量、參數(shù)和函數(shù)的形態(tài),而 TypeScript 類型檢查器可以在開(kāi)發(fā)者運(yùn)行代碼之前,幫助篩查諸如拼寫(xiě)錯(cuò)誤、遺漏屬性以及錯(cuò)誤的函數(shù)調(diào)用等問(wèn)題。


TypeScript 編輯器還引入了自動(dòng)補(bǔ)全、代碼導(dǎo)航和重構(gòu)等功能,用戶可以在 Visual Studio 和 VS Code 等編輯器中體驗(yàn)。


使用命令

用戶可以通過(guò)以下命令使用 npm 開(kāi)始使用 TypeScript:


npm install -D typescript

或者可以通過(guò) NuGet 方式獲取。


新版變化

禁止使用空值合并(Nullish)與真值檢查(Truthy Checks)


TypeScript 5.6 繼續(xù)完善檢查“可疑代碼”,現(xiàn)在能夠在發(fā)現(xiàn)表達(dá)式計(jì)算結(jié)果始終為 TRUE 時(shí)拋出錯(cuò)誤,如正則表達(dá)式,函數(shù)表達(dá)式等:


if (/0x[0-9a-f]/) {

//  ~~~~~~~~~~~~

// error: This kind of expression is always truthy.

}

if (x => 0) {

//  ~~~~~~

// error: This kind of expression is always truthy.

}

function isValid(value: string | number, options: any, strictness: "strict" | "loose") {

    if (strictness === "loose") {

        value = +value

    }

    return value < options.max ?? 100;

    //     ~~~~~~~~~~~~~~~~~~~

    // error: Right operand of ?? is unreachable because the left operand is never nullish.

}

if (

    isValid(primaryValue, "strict") || isValid(secondaryValue, "strict") ||

    isValid(primaryValue, "loose" || isValid(secondaryValue, "loose"))

) {

    //                    ~~~~~~~

    // error: This kind of expression is always truthy.

}

通過(guò)啟用 ESLint 的 no-constant-binary-expression 規(guī)則,同樣可以實(shí)現(xiàn)類似效果,你可以在他們的博客文章中看到部分成果。


然而,TypeScript 新增的檢查與 ESLint 規(guī)則并非完全重疊,并且微軟認(rèn)為將這些檢查內(nèi)置于 TypeScript 本身具有很大價(jià)值。


Iterator Helper 方式


JavaScript 中存在可迭代對(duì)象(可以通過(guò)調(diào)用 [Symbol.iterator]() 來(lái)遍歷的對(duì)象)和迭代器(具有 next () 方法的對(duì)象,我們可以調(diào)用該方法以在遍歷過(guò)程中嘗試獲取下一個(gè)值)的概念。


Iterable 和 IterableIterator 在 JavaScript 中隨處可見(jiàn),但許多人反饋?zhàn)约簯涯?Array 上的方法,比如 map 、 filter ,出于某種原因還有 reduce 。


function* positiveIntegers() {

    let i = 1;

    while (true) {

        yield i;

        i++;

    }

}

const evenNumbers = positiveIntegers()map(x = x * 2)

// Output

//    2

//    4

//    6

//    8

//   10

for (const value of evenNumbers.take(5)) {

    console.log(value)

}

這就是為什么最近在 ECMAScript 中提出了一項(xiàng)提案,要將 Array 中的許多方法(及更多)添加到 JavaScript 中生成的大多數(shù) IterableIterator 上。