如何获得正确键入的“类型映射”功能

时间:2018-11-05 07:23:02

标签: typescript

我有一个 type ,该函数用于将一种类型的 I 映射到另一种类型的 O (又名 input output 类型)。当前看起来像这样:

export interface IFunctionalMapping<I, O, K extends keyof O> {
  [prop: Extract<O[K], string>]: (input: keyof I, obj?: I) => K;
}

一个人会像这样使用它的想法:

export interface IFunctionalMapping<I, O, K extends keyof O> {
  [prop: Extract<K, string>]: (input: I) => O[K];
}

export interface IInput {
  firstName: string;
  lastName: string;
}

export interface IOutput {
  fullName: string;
}

const mapping: IFunctionalMapping<IInput, IOutput> = {
  fullName: (i) => `${i.firstName} ${i.lastName}`
}

目标是将 mapping 的属性限制为IOutput的有效属性,并且函数导出的类型为IOutput的属性类型。

首先我在IFunctionalMapping界面上遇到错误,看来我没有100%正确地做事:

enter image description here

使用 Extract 语法可以避免这种情况。

第二,我尝试将mapping键入 IFunctionalMapping 的过程抱怨说它需要3种类型...尽管我本来不需要将K extends keyof O传递为O的定义暗示了这一点。但是显然,我对此也一定是错误的。

enter image description here

1 个答案:

答案 0 :(得分:2)

如果您需要使用映射类型来映射mkdir -p aaa/180809_1047 aaa/180915_0055 aaa/181012_1545 aaa/xyz \ bbb/xyz bbb/180809_1047 bbb/180915_0055 bbb/181012_1545 bbb/181105_0000 \ zzz/xyz zzz/180821_1555 zzz/181004_2355 find . -maxdepth 1 -type d -print0 | xargs -0 sh -c ' for dir ; do find "${dir}" -maxdepth 1 -type d \ -name '[0-9][0-9][0-1][0-9][0-3][0-9]_[0-2][0-9][0-6][0-9]' | sort | tail -1 done' dummy | sort ./bbb/181105_0000 ./aaa/181012_1545 ./zzz/181004_2355 的类型:

IOutput