zed*_*yas 3 generics typescript typescript-typings
我希望完成的是以下方面的事情:
type AType<T, U> = (T is Equal U) ? T : [T, U]
[编辑] 基于评论,让我用一个实际例子重新表述:
假设 T 是 aUInt8Array等式是如果 U 也是 a UInt8Array。
等价由相同的类型定义。
[编辑 2] 基于@daniel-hilgarth 的答案如果我们假设 T 和 U 是数字,
它T extends U在实际使用中不起作用(见下文),T 将被转换为传递的数字的实例,如在 T 中那样t be anumber但 T 将是2扩展 type 的 a number。所以如果 U 是3它不会延长2 
抱歉,如果不清楚,请检查下面的实施
type AType<T, U> = T extends U ? U extends T ? T : [T, U] : [T, U]
const fn = <T extends string | number, U extends string | number>(
  x: T,
  y: U,
): AType<T, U> => {
  throw new Error ('Yet to implement !')
}
const a = fn (2, 2)    // correct number
const b = fn (2, 's')  // correct [number, string]
但
const c = fn (2, 3)    // incorrect [number, number]
我需要的不是:
T extends U但:
T extends无论如何U extends我希望它澄清了这个问题。
可以做到吗?
目前,对于条件类型,您只能提出一个问题:extends. 没有平等,但我们可以通过使用两个检查来模拟它:
type AType<T, U> = T extends U ? U extends T ? T : [T, U] : [T, U]
首先,我们检查是否  Textends U。如果是这样,我们检查是否Uextends T。只有当T和U的类型完全相同时,两个条件才能同时为真,因此我们返回T。
这在 Typescript 3.2 中正常工作:
(链接)
另外,值得一读以了解一般的条件类型:https : //koerbitz.me/posts/a-look-at-typescripts-conditional-types.html
| 归档时间: | 
 | 
| 查看次数: | 776 次 | 
| 最近记录: |