首页 > 解决方案 > 为什么这个打字稿模板永远不会返回?

问题描述

正如在这个打字稿游乐场中看到的那样:

打字稿游乐场

type FirstOrSecond<condition, T1, T2> = condition extends never ? T1 : T2

type foo = never extends never ? () => 'hi' : (arg1: never) => 'hi'
type wtf = FirstOrSecond<never, () => 'hi', (arg1: never) => 'hi'>

泛型FirstOrSecond分配neverwtf变量,而明确定义foo分配() => 'hi'为类型。

为什么泛型会发疯?

标签: typescript

解决方案


Distributive conditional types. This is intentional.

Usually applied workaround is to wrap types into single-member tuple in the condition:

type FirstOrSecond<condition, T1, T2> = [condition] extends [never] ? T1 : T2

推荐阅读