typescript - 仅返回提供的键的部分类型的泛型函数的返回类型是什么?
问题描述
所以我的目标是有这样的东西,这样返回类型只包括传递给函数的键:
function doTheThings<T, U = Partial<T>>(values: U): { [P in keyof U]: U[P] };
目前,我得到的假设是我的参数和我的返回类型都是独立Partial<T>
的,因此参数上不存在的键在返回类型上可用,如下所示:
type Thing = { name: string, age: number };
const seuss = doTheThings<Thing>({ name: 'seuss'});
// Should work, but TypeScript raises error
// Type 'string | undefined' is not assignable to type 'string'.
// Type 'undefined' is not assignable to type 'string'.
const name: string = seuss.name;
// Should work, but TypeScript raises error
// Type 'number | undefined' is not assignable to type 'undefined'.
// Type 'number' is not assignable to type 'undefined'.
const age: undefined = seuss.age;
我今天在 TypeScript 中尝试做的事情是否可行?
解决方案
问题是推理如何与显式和默认类型参数一起工作。如果您指定一个类型参数,则不会对参数的其余部分进行推理(将使用它们的默认值)
通常的解决方法是使用函数柯里化:
function doTheThings<T>() {
return function <U extends Partial<T>>(values: U): U {
return values;
}
}
type Thing = { name: string, age: number };
const seuss = doTheThings<Thing>()({ name: 'seuss'});
// this value should be a string since it was included as an argument to the function
const name: string = seuss.name;
// error age does not exist
const age: undefined = seuss.age;
上面的函数只会返回一个带有传入键的对象。如果你想保留未传递的键,你可以与Partial<T>
:
function doTheThings<T>() {
return function <U extends Partial<T>>(values: U): U & Partial<T> {
return values;
}
}
const age: number | undefined = seuss.age;
推荐阅读
- ios - Azure 管道构建因多个预配配置文件而失败
- angular - 面临 NgModel 的问题和无线电输入的 [检查]
- python - 如何将初始点坐标链接到scipy中相应的Voronoi顶点坐标?
- javascript - 从输入中过滤掉所需的东西
- amazon-web-services - SQS 队列监听器(Springboot)
- parallel-processing - 在并行编程中,只划分一个等于可用处理器的问题有意义吗?
- python - 将列中的值转置到列标题?
- azure - 关于调用一个实体的多个编排功能的问题
- matlab - 使用 imagesc 使网格可见(Linux 软件 opengl)
- swift - 带有 Xcode 12 的 Interface Builder 文件中的未知类 QuoteDetailViewController