繁体   English   中英

'[string]' 类型的参数不可分配给 'U' 类型的参数

[英]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有了基本的了解。 我在这里很困惑。

我试过如下,

  1. export type SimpleArgs = (string | number | boolean | undefined)[];
  • 类型SimpleArgs应该是字符串或数字或 boolean 的数组,也允许使用 undefined。
  1. export type BasicAsyncFunc<U extends SimpleArgs, R> = (...args: U) => Promise<ReadonlyDeep<R>>;

    BasicAsyncFunc类型接受两个 generics:

    • U,扩展SimpleArgs U 可以在这里吗?
    • 这里的R是什么?
  2. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM