TypeScript 3.6 Beta 已發布,團隊表示希望此測試版本有望成為 TypeScript 3.6 的完整功能版本。此外,在接下來的幾周內,團隊會為 RC 版以及穩定版的發布繼續修復錯誤並提升性能和穩定性。
可通過 NuGet 體驗測試版,或使用 npm 進行獲取:
npm install -g typescript @ beta
下面繼續看看此版本值得關注的新功能。
TypeScript 3.6 引入了對迭代器和生成器函數(generator functions)的更嚴格檢查。在早期版本中,生成器的使用者無法區分一個值是來自 yield 操作或是從生成器返回。
function* foo() {
if (Math.random() < 0.5) yield 100;
return "Finished!"
}
let iter = foo();
let curr = iter.next();
if (curr.done) {
// TypeScript 3.5 and prior thought this was a 'string | number'.
// It should know it's 'string' since 'done' was 'true'!
curr.value
}
此外,生成器會假設 yield 的類型始終為 any。
function* bar() {
let x: { hello(): void } = yield;
x.hello();
}
let iter = bar();
iter.next();
iter.next(123); // oops! runtime error!
以第一段代碼為例,在 TypeScript 3.6 中,檢查器會知道 curr.value 的正確類型應為 string,並在最後一個示例中糾正對 next() 的錯誤調用。這要歸功於因在Iterator
和IteratorResult
類型聲明中進行的一些更改而引入部分新的類型參數,以及 TypeScript 用於代表稱為Generator
類型的生成器。
Promise
是目前使用非同步數據的最常用方法之一。不幸的是,使用Promise
面向對象的 API 通常會讓使用者感到困惑。因此針對Promise
被錯誤處理的情況,TypeScript 3.6 引入了一些改進。
例如,在將其傳遞給另一個函數之前,Promise
忘記.then()
或者await
內容通常是很常見的。TypeScript 的錯誤消息現在是專用的,並告知使用者他們可能應該考慮使用await
關鍵字。
interface User {
name: string;
age: number;
location: string;
}
declare function getUserData(): Promise<User>;
declare function displayUser(user: User): void;
async function f() {
displayUser(getUserData());
// ~~~~~~~~~~~~~
// Argument of type 'Promise<User>' is not assignable to parameter of type 'User'.
// ...
// Did you forget to use 'await'?
}
TypeScript 3.6 穩定版暫定於8月底發布,團隊表示會在穩定版發布幾周前推出候選版本。
[admin
]