typescript - 推断元组类型而不是联合类型

标签 typescript typescript-typings

有人知道如何让编译器自动推断元组类型吗?

// Now: (string | number)[]
// Wanted: [string, number][]
const x = [ ["a", 2], ["b", 2] ];

最佳答案

如果我们使用一个额外的函数来稍微帮助类型推断,就可以做到这一点:

function tupleArray<T1, T2, T3>(arr:[T1, T2, T3][]) : typeof arr 
function tupleArray<T1, T2>(arr:[T1, T2][]) : typeof arr 
function tupleArray<T1>(arr:[T1][]) : typeof arr 
function tupleArray(arr:any[]) : any[]{
    return arr;
}

var t = tupleArray([ ["a", 2], ["b", 2] ]) // [string, number][]

编辑

具有更少覆盖的更好版本:

const tupleArray = <T extends ([any] | any[])[]>(args: T): T => args
tupleArray([["A", 1], ["B", 2]]) // [string, number][]

如果元组中需要超过 3 个项目,则可以添加更多重载。

关于typescript - 推断元组类型而不是联合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48872328/

相关文章:

接口(interface)内的 typescript 默认功能

javascript - Angular 4 与 AngularJs 指令

javascript - Typescript 通用方法装饰器返回 Promise 作为值

typescript - 如何在 TypeScript 类型定义中简化定义长联合类型

javascript - 在 typescript 内部模块中使用外部 typescript 库

typescript - 推断传递的属性名称的值

javascript - 使用递归和 yield 关键字提取嵌套列表的 Typescript 函数

node.js - 如何在 Typescript 中将属性重写为不可为空

c# - typescript 升级 1.8.10 到 2.9.2 和 4.6.4 构建错误

typescript :如何为 npm 模块使用本地类型声明文件