我有一个对象,其中的每个值都是一个函数,它需要一个字符串或字符串数组:
const myMapper: Record<Filter, (value: string | string[]) => string> = {
contains: (value: string) => `do something with ${value}`,
between: ([value1, value2]: string[]) => `something with ${value1} and ${value2}`,
};
问题是:如果我让ts知道函数中的参数可以是字符串或数组,它将抛出错误:
Type '(value: string) => string' is not assignable to type '(value: string | string[]) => string'
对于第一项,第二项出现类似错误。
如何保证在使用对象时传递正确类型的值(字符串或字符串数组)?是将unknown
用于Record的第二个参数的唯一选项吗?
1条答案
按热度按时间mrzz3bfm1#
简单地省略显式类型注解看起来就足够了,而且也更容易。
这样,您甚至不需要“承诺”您将传递正确类型的参数- TypeScript将首先防止您传递错误的参数(
contains
将只接受字符串,而between
将只接受字符串数组)。