【问题标题】:TypeScript: How to infer Array item type using Mapped TypesTypeScript:如何使用映射类型推断数组项类型
【发布时间】:2018-03-02 02:36:50
【问题描述】:

我有一个问题,如何通过映射类型获取数组项类型 例如这里当我使用array 方法时,我可以推断出数组项的类型,但是如何在arrayStr 方法中进行呢?为什么在这个例子中 aStrId 的类型是 'never'?

Sandbox

class One<T> {

    constructor(
        data: T
    ) { }

    array<R>(getter: ((obj: T) => R[])): Two<R> {
        return null;
    }

    arrayStr<K extends keyof T, R>(name: K, idField: keyof R): Two<R> {
        return null;
    }

}

class Two<T> {

    getItem(): T {
        return null;
    }

    getAsArray(): T[] {
        return [];
    }

}

const data = {
    a: [{ q: 1 }, { q: 2 }]
};

const one = new One(data);
const a = one.array(p => p.a);
const aValue = a.getItem().q;

const oneStr = new One(data);
const aStre = oneStr.arrayStr('a');
const aStrValue = aStre.getItem().q;

const oneStrId = new One(data);
const aStrId = oneStrId.arrayStr('a', 'q');
const aStrValueId = aStre.getItem().q;

【问题讨论】:

  • 我很难理解这个问题。您可以直接发布代码以及您遇到问题的特定位置吗? arrayStr() 方法应该做什么?签名很奇怪(似乎没有办法知道R 应该是什么)并且实现(return null)没有给我提示。

标签: typescript types


【解决方案1】:

我在 TypeScript Gitter link 得到了答案。 这将起作用:

arrayStr<K extends keyof T, R, E>(this: One<{[k in K]: R[] | E}>, name: K): Two<R> {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-05
    • 2023-02-26
    • 1970-01-01
    • 2019-09-04
    • 2018-06-25
    • 2019-09-17
    • 2018-07-03
    • 2021-05-27
    相关资源
    最近更新 更多