【发布时间】:2023-01-30 23:56:35
【问题描述】:
有一个函数接受一组特定的参数。特别是,回调函数将一个对象或一组对象作为参数,该对象或对象数组依赖于另一个 isArray 参数。
我想上瘾。
type Option = {
name: string
value: string
> }
type FunctionProps<IsArray extends boolean | undefined> = {
isArray?: IsArray
callback: IsArray extends false
> ? (options: Option) => void
> : (options: option[]) => void
> }
const func = <T extends boolean | undefined = false>({isArray, callback}: FunctionProps<T>) => {
const options: Option[] = /* */
const currentOption: Option = /* */
if (isArray) {
callback(options) // Argument of type 'Option[]' is not assignable to parameter of type 'Option & Option[]'.
else {
callback(currentOption) // Argument of type 'Option' is not assignable to parameter of type 'Option & Option[]'.
> }
> }
调用 func 时,一切正常,但在 func 内部调用回调时,typescript 想要获取类型 Option & Option[] 的交集作为参数。我可以在调用callback(value as Option & Option[])的时候显式指定类型,但是这样就很难理解了,也不清楚里面到底发生了什么。
是不是可以在里面把类型定义的更清楚一些?附言如果我这样声明函数类型,什么都不会改变
type FunctionProps = {
isArray: false
callback: (options: Option) => void
} | {
isArray: true
callback: (options: Option[]) => void
}
【问题讨论】:
标签: typescript typescript-typings