diff --git a/packages/fiber/src/core/reconciler.ts b/packages/fiber/src/core/reconciler.ts index a3bdc6f1b0..6f92d6e2b1 100644 --- a/packages/fiber/src/core/reconciler.ts +++ b/packages/fiber/src/core/reconciler.ts @@ -20,7 +20,14 @@ export interface Catalogue { [name: string]: ConstructorRepresentation } -export type Args = T extends ConstructorRepresentation ? ConstructorParameters : any[] +// TODO: handle constructor overloads +// https://github.com/pmndrs/react-three-fiber/pull/2931 +// https://github.com/microsoft/TypeScript/issues/37079 +export type Args = T extends ConstructorRepresentation + ? T extends typeof THREE.Color + ? [r: number, g: number, b: number] | [color: THREE.ColorRepresentation] + : ConstructorParameters + : any[] export interface InstanceProps { args?: Args

diff --git a/packages/fiber/src/three-types.ts b/packages/fiber/src/three-types.ts index 3e63321205..86b7ee51b4 100644 --- a/packages/fiber/src/three-types.ts +++ b/packages/fiber/src/three-types.ts @@ -1,5 +1,5 @@ import type * as THREE from 'three' -import type { EventHandlers, InstanceProps, ConstructorRepresentation } from './core' +import type { Args, EventHandlers, InstanceProps, ConstructorRepresentation } from './core' import type { Mutable, Overwrite } from './core/utils' export { Overwrite } @@ -12,7 +12,7 @@ interface VectorRepresentation extends MathRepresentation { } export type MathType = T extends THREE.Color - ? ConstructorParameters | THREE.ColorRepresentation + ? Args | THREE.ColorRepresentation : T extends VectorRepresentation | THREE.Layers | THREE.Euler ? T | Parameters | number : T | Parameters