我有一个 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%正确地做事:
使用 Extract 语法可以避免这种情况。
第二,我尝试将mapping
键入 IFunctionalMapping 的过程抱怨说它需要3种类型...尽管我本来不需要将K extends keyof O
传递为O的定义暗示了这一点。但是显然,我对此也一定是错误的。
答案 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