diff --git a/zh/release-notes/typescript-5.1.md b/zh/release-notes/typescript-5.1.md
index 88e2303c..99dfcf4b 100644
--- a/zh/release-notes/typescript-5.1.md
+++ b/zh/release-notes/typescript-5.1.md
@@ -6,7 +6,7 @@
```js
function foo() {
- // no return
+ // no return
}
// x = undefined
@@ -19,23 +19,23 @@ let x = foo();
```ts
// fine - we inferred that 'f1' returns 'void'
function f1() {
- // no returns
+ // no returns
}
// fine - 'void' doesn't need a return statement
function f2(): void {
- // no returns
+ // no returns
}
// fine - 'any' doesn't need a return statement
function f3(): any {
- // no returns
+ // no returns
}
// error!
// A function whose declared type is neither 'void' nor 'any' must return a value.
function f4(): undefined {
- // no returns
+ // no returns
}
```
@@ -47,29 +47,29 @@ declare function takesFunction(f: () => undefined): undefined;
// error!
// Argument of type '() => void' is not assignable to parameter of type '() => undefined'.
takesFunction(() => {
- // no returns
+ // no returns
});
// error!
// A function whose declared type is neither 'void' nor 'any' must return a value.
takesFunction((): undefined => {
- // no returns
+ // no returns
});
// error!
// Argument of type '() => void' is not assignable to parameter of type '() => undefined'.
takesFunction(() => {
- return;
+ return;
});
// works
takesFunction(() => {
- return undefined;
+ return undefined;
});
// works
takesFunction((): undefined => {
- return;
+ return;
});
```
@@ -81,12 +81,12 @@ takesFunction((): undefined => {
```ts
// Works in TypeScript 5.1!
function f4(): undefined {
- // no returns
+ // no returns
}
// Works in TypeScript 5.1!
takesFunction((): undefined => {
- // no returns
+ // no returns
});
```
@@ -95,16 +95,15 @@ takesFunction((): undefined => {
```ts
// Works in TypeScript 5.1!
takesFunction(function f() {
- // ^ return type is undefined
-
- // no returns
+ // ^ return type is undefined
+ // no returns
});
// Works in TypeScript 5.1!
takesFunction(function f() {
- // ^ return type is undefined
+ // ^ return type is undefined
- return;
+ return;
});
```
@@ -113,10 +112,10 @@ takesFunction(function f() {
```ts
// Works in TypeScript 5.1 under '--noImplicitReturns'!
function f(): undefined {
- if (Math.random()) {
- // do some stuff...
- return;
- }
+ if (Math.random()) {
+ // do some stuff...
+ return;
+ }
}
```
@@ -128,8 +127,8 @@ TypeScript 4.3 支持将成对的 `get` 和 `set` 定义为不同的类型。
```ts
interface Serializer {
- set value(v: string | number | boolean);
- get value(): string;
+ set value(v: string | number | boolean);
+ get value(): string;
}
declare let box: Serializer;
@@ -159,15 +158,15 @@ TypeScript 5.1 现在允许为 `get` 和 `set` 访问器属性指定完全不相
```ts
interface CSSStyleRule {
- // ...
+ // ...
- /** Always reads as a `CSSStyleDeclaration` */
- get style(): CSSStyleDeclaration;
+ /** Always reads as a `CSSStyleDeclaration` */
+ get style(): CSSStyleDeclaration;
- /** Can only write a `string` here. */
- set style(newValue: string);
+ /** Can only write a `string` here. */
+ set style(newValue: string);
- // ...
+ // ...
}
```
@@ -175,20 +174,78 @@ interface CSSStyleRule {
```ts
class SafeBox {
- #value: string | undefined;
-
- // Only accepts strings!
- set value(newValue: string) {
+ #value: string | undefined;
- }
+ // Only accepts strings!
+ set value(newValue: string) {}
- // Must check for 'undefined'!
- get value(): string | undefined {
- return this.#value;
- }
+ // Must check for 'undefined'!
+ get value(): string | undefined {
+ return this.#value;
+ }
}
```
实际上,这与在 `--exactOptionalProperties` 选项下可选属性的检查方式类似。
更多详情请参考 [PR](https://github.com/microsoft/TypeScript/pull/53417)。
+
+## 解耦 JSX 元素和 JSX 标签类型之间的类型检查
+
+TypeScript 在 JSX 方面的一个痛点是对每个 JSX 元素标签的类型要求。
+这个 TypeScript 版本使得 JSX 库更准确地描述了 JSX 组件可以返回的内容。
+对于许多人来说,这具体意味着可以在 React 中使用[异步服务器组件](https://github.com/reactjs/rfcs/blob/7f8492f6a177fc33fe807d242319f2f96353bf68/text/0188-server-components.md)。
+
+做为背景知识,JSX 元素是下列其一:
+
+```tsx
+// A self-closing JSX tag
+