TypeScript 5.1 & 5.2

getter 和 setter 可以完全不同类型了

以前我们提过,getter 的类型至少要是其中一个 setter 的类型。这个限制被突破了。现在可以完全使用不同类型了。

v5.1 后,没有再报错了

 

Using 和 Disposable

看这篇 TypeScript – Using Disposable

 

Decorator Metadata

看这篇 TypeScript – Decorator Metadata

 

Copying Array Methods – toReversed、toSorted、toSpliced、with

参考: Docs – Announcing TypeScript 5.2

JavaScript array 有几个功能是 mutable 的。它不会先 clone 一份给你。

比如 Array.reverse

const array = [1, 2, 3];

const array1 = array.filter(() => true);
console.log(array === array1); // false

const array2 = array.reverse();
console.log(array2 === array); // true

看到吗,filter 是 immutable,reverse 是 mutable。一不小心就会被坑。

于是 JS 推出了 immutable 版本的 reverse,叫 toReversed

const array2 = array.toReversed();
console.log(array2 === array); // false

除了 toReversed,还有 toSorted、toSpliced、with

with 的作用是替换 value,写法是这样的 

const array = ['a', 'b', 'c'];

const array2 = array.with(1, 'bb');
console.log(array2 === array); // false
console.log(array2[1]); // 'bb'

兼容性

tsconfig.json 需要添加 compilerOptions.lib "ES2023.Array"

browser 方面 Safari 需要 IOS 16 才支持,所以最好是加上 runtime polyfill。

比如 core.js

import 'core-js/actual/array/with';
import 'core-js/actual/array/to-reversed';
import 'core-js/actual/array/to-sorted';
import 'core-js/actual/array/to-spliced';

 

import type

在 import 的时候,可以声明我们只是想要 import 类型。

当 import type 以后,类型就不可以被当成 value 使用。比如上面的例子,我 import 的是 class 但是我只想把它当成类型给 TypeScript 用,这样声明以后,transpile to JS 后就不会整的 import 这个 class。

 

WeakSet 和 WeakMap 可以用 symbol 作为 Key

这个也是 JavaScript 的功能。目前 stage 3

需要 setup tsconfig.json

 调用

const wk = new WeakMap();
const symbol = Symbol('key');
wk.set(symbol, ''); // 以前会报错

const ws = new WeakSet();
ws.add(symbol); // 以前会报错

 兼容度,Safari IOS 和 Firefox 兼容都不太理想。

而且视乎没有 polyfill。我看,还是别用了吧。

 

posted @ 2023-08-27 21:40  兴杰  阅读(60)  评论(0编辑  收藏  举报