Skip to content

Commit 1725cbb

Browse files
committedOct 15, 2024
docs(operator/extends): fixed wangdoc#125
1 parent 635a5fa commit 1725cbb

File tree

1 file changed

+9
-10
lines changed

1 file changed

+9
-10
lines changed
 

‎docs/operator.md

+9-10
Original file line numberDiff line numberDiff line change
@@ -378,18 +378,17 @@ type T2 = RegExp extends Animal ? number : string;
378378

379379
一般来说,调换`extends`两侧类型,会返回相反的结果。举例来说,有两个类`Cat``Animal`,前者是后者的子类型,那么`Cat extends Animal`就为真,而`Animal extends Cat`就为伪。
380380

381-
如果需要判断的类型是一个联合类型,那么条件运算符会展开这个联合类型
381+
如果对泛型使用 extends 条件运算,有一个地方需要注意。当泛型的类型参数是一个联合类型时,那么条件运算符会展开这个类型参数,即`T<A|B> = T<A> | T<B>`,所以 extends 对类型参数的每个部分是分别计算的
382382

383383
```typescript
384-
(A|B) extends U ? X : Y
384+
type Cond<T> = T extends U ? X : Y;
385385

386-
// 等同于
387-
388-
(A extends U ? X : Y) |
389-
(B extends U ? X : Y)
386+
type MyType = Cond<A|B>;
387+
// 等同于 Cond<A> | Cond<B>
388+
// 等同于 (A extends U ? X : Y) | (B extends U ? X : Y)
390389
```
391390

392-
上面示例中,`A|B`是一个联合类型,进行条件运算时,相当于`A``B`分别进行运算符,返回结果组成一个联合类型。
391+
上面示例中,泛型`Cond`的类型参数`A|B`是一个联合类型,进行条件运算时,相当于`A``B`分别进行条件运算,返回结果组成一个联合类型。也就是说,如果类型参数是联合类型,条件运算的返回结果依然是一个联合类型
393392

394393
如果不希望联合类型被条件运算符展开,可以把`extends`两侧的操作数都放在方括号里面。
395394

@@ -398,18 +397,18 @@ type T2 = RegExp extends Animal ? number : string;
398397
type ToArray<Type> =
399398
Type extends any ? Type[] : never;
400399

401-
// string[]|number[]
400+
// 返回结果 string[]|number[]
402401
type T = ToArray<string|number>;
403402

404403
// 示例二
405404
type ToArray<Type> =
406405
[Type] extends [any] ? Type[] : never;
407406

408-
// (string | number)[]
407+
// 返回结果 (string | number)[]
409408
type T = ToArray<string|number>;
410409
```
411410

412-
上面的示例一,传入`ToArray<Type>`的类型参数是一个联合类型,所以会被展开,返回的也是联合类型。示例二是`extends`两侧的运算数都放在方括号里面,所以传入的联合类型不会展开,返回的是一个数组。
411+
上面的示例一,泛型`ToArray<Type>`的类型参数`string|number`是一个联合类型,所以会被展开,返回的也是联合类型`string[]|number[]`。示例二是`extends`两侧的运算数都放在方括号里面,左侧是`[Type]`,右侧是`[any]`,这时传入的联合类型不会展开,返回的是一个数组`(string|number)[]`
413412

414413
条件运算符还可以嵌套使用。
415414

0 commit comments

Comments
 (0)