代码之家  ›  专栏  ›  技术社区  ›  Ben Carp

在Typescript中,有没有一种方法可以将一个对象约束为另一个对象的子对象,而不将所有字段键入为未定义?

  •  1
  • Ben Carp  · 技术社区  · 7 年前

    更具体地说,是否有方法约束参数 someFilters 作为另一个对象的子对象/部分的对象 filters ,以致 typof someFilters[key] = typeof filters[key] (但不一定相反)?

    Partial将不起作用,因为它将所有字段定义为可能未定义的字段。Pick要求您提前知道键,而我正试图定义一个通用函数。我正在寻找一个函数泛型,或者可能是一个只接受一个类型参数的类型泛型——我们所指的大对象的类型。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Titian Cernicova-Dragomir    7 年前

    您可以创建一个接受过滤器类型的函数 T 而扩展类型的对象是 Partial<T> . 这表示为扩展的额外类型参数 . 这意味着传入的对象的实际类型将被保留,因此在创建该对象之后,没有额外的字段可供保存 undefined

    interface Filter {
        searchText: string;
        min: number;
        max: number;
    }
    
    function createPartial<T>() {
        return function <P extends Partial<T>>(o: P) {
            return o
        }
    }
    
    let subFilter = createPartial<Filter>()({
        min: 1,
    })
    subFilter.min // ok
    subFilter.max // err
    

    笔记 T Filter partial type inference 可能很快就会碰到打字稿。

    推荐文章