[英]Argument of type 'number' is not assignable to parameter of type 'string'
[英]Argument of type '[string]' is not assignable to parameter of type 'U'
我声明了以下这些类型,
import { ReadonlyDeep } from 'type-fest';
import { AsyncFunction } from 'type-fest/source/async-return-type';
// We don't allow null. undefined is required instead.
export type SimpleArgs = (string | number | boolean | undefined)[];
export type BasicAsyncFunc<U extends SimpleArgs, R> = (...args: U) => Promise<ReadonlyDeep<R>>;
interface Memoized<U extends SimpleArgs, R> extends BasicAsyncFunc<U, R> {
cache_size: () => number;
clear_cache: () => void;
}
const memoize_async = <R, U extends SimpleArgs>(
options: { ttl: number; size: number },
f: BasicAsyncFunc<U, R>,
): Memoized<U, R> => {
return () => {
// some more logic
return f(arg) // error is here
}
}
'[string]' 类型的参数不能分配给 'U' 类型的参数。 '[string]' 可分配给类型'U' 的约束,但'U' 可以用不同的约束子类型'(string | number | boolean | undefined)[]' 实例化。
另外,任何人都可以解释上面声明的类型吗?
上述类型的f
的签名是什么?
另外, memoize_async
的签名?
我对generics有了基本的了解。 我在这里很困惑。
我试过如下,
export type SimpleArgs = (string | number | boolean | undefined)[];
SimpleArgs
应该是字符串或数字或 boolean 的数组,也允许使用 undefined。 export type BasicAsyncFunc<U extends SimpleArgs, R> = (...args: U) => Promise<ReadonlyDeep<R>>;
BasicAsyncFunc
类型接受两个 generics:
SimpleArgs
U 可以在这里吗?R
是什么? interface Memoized<U extends SimpleArgs, R> extends BasicAsyncFunc<U, R> { cache_size: () => number; clear_cache: () => void; }
这里完全不知道:(
我最好的答案是memoized_async
中的U
实际上不是(string | number | boolean | undefined)[]
。
如果我这样做:
const foo = memoize_async<void,number[]>({ttl:0,size:0},async ()=>{
})
arg
,这显然是一个字符串,将是无效的,因为 function 需要一个数字。 我不确定你需要做什么作为快速修复,但如果我是你,我只会拍一堆@ts-ignore 或键入断言来修复工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.