'string | 类型的参数number' 不可分配给类型为 'number' 的参数。 TS分不清

问题描述 投票:0回答:0

在这里,我想创建一个可以定义其依赖项的函数,这些依赖项在实例化时提供给函数。我无法让 TS 在此处提供正确的类型检查。我得到的错误是:

(parameter) d1: string | number
Argument of type 'string | number' is not assignable to parameter of type 'number'.
  Type 'string' is not assignable to type 'number'

如何让 TS 按顺序理解 args 的类型,而不会将它们作为一个 union 混为一谈?

游乐场

export type Injectable<T = any> = {
  dependencies: Injectable[];
  get: () => Promise<T | null>;
};

export type AsyncFactoryFn<T, Deps extends any[] = any[]> = (...args: {[K in keyof Deps]: Deps[K] extends Injectable<infer U> ? U : never}) => Promise<T>;

export function injectable<T, Deps extends Injectable<any>[]>(
  asyncFactoryFn: AsyncFactoryFn<T, Deps>,
  dependencies: Deps = [] as unknown as Deps,
): Injectable<T> {
  return {} as Injectable<T>;
}

// EXAMPLE

const dep1 = {
  dependencies: [],
  get: () => Promise.resolve(1),
}

const dep2 = {
  dependencies: [],
  get: () => Promise.resolve('a'),
}

const injectableObject = injectable((d1, d2) => Promise.resolve(someService(d1, d2)), [dep1, dep2]);

function someService(d1: number, d2: string) {
  console.log(d1, d2);
}
typescript
© www.soinside.com 2019 - 2024. All rights reserved.