node.js - 错误 ts(2322) 试图在 Typescript 中定义通用函数签名
问题描述
我正在尝试定义这样的接口:
interface ColumnGenerator {
columnName: string;
columnValuesAsArgs?: string[];
generator: <T = any[], R = any>(...args: T extends any[] ? T : [T]) => R;
}
的值generator
应该是一个函数,它接受任意数量的任何类型的参数(如果有的话),然后返回一些东西。
但是,当我做类似的事情时:
const generatedColumn: ColumnGenerator = {
columnName: 'creation_date',
generator: () => new Date()
}
编译器产生下一个错误:
Type 'Date' is not assignable to type 'R'.
'R' could be instantiated with an arbitrary type which could be unrelated to 'Date'.
我对 Typescript 还很陌生,所以我不知道我在这里做错了什么。谁能给我一个解释?
解决方案
生成器的值应该是一个函数,它接受任意数量的任何类型的参数(如果有的话),然后返回一些东西。
您在此处描述的类型是(...args: any[]) => any
. 该类型是一个函数,它接受任意数量的any
类型参数 & 然后返回任何东西。
type ColumnGenerator = {
columnName: string;
columnValuesAsArgs?: string[];
generator: (...args: any[]) => any;
}
const generatedColumn: ColumnGenerator = {
columnName: 'creation_date',
generator: () => new Date()
}
我不完全确定您要做什么,但是如果您想稍微限制一下,可以限制使ColumnGenerator
类型通用并在使用时对其进行配置:
type ColumnGenerator<T = any> = {
columnName: string;
columnValuesAsArgs?: string[];
generator: (...args: any[]) => T;
}
const generatedColumn: ColumnGenerator<Date> = {
columnName: 'creation_date',
generator: () => new Date(), // this will now error if `Date` isn't returned from this function
}
推荐阅读
- python - 凯利标准应用程序的逻辑问题(使用最后一行值) - python,pandas
- android - 已连接,Android 中没有互联网
- python-3.x - 如何从临床笔记中进行部分分割?
- node.js - AWS EC2 上 MongoDB Node.JS 系统设计的扩展性能问题
- python - 二项式比例的 99% 置信区间的覆盖率
- android - 录制时背景音频播放 - Flutter
- python-3.x - 一个python函数,它从参数中删除重新获取的数字
- javascript - 无法将主题更改保存给用户。错误可能在哪里?
- jquery - 使用 ajax 和 jquery 的动态依赖下拉选择
- bitcoin - Pinescript 回测低时间框架