Home > database >  Typescript can not infer constructor return type
Typescript can not infer constructor return type

Time:10-08


type ArrayBufferViewConstructor<T> = new (buffer: ArrayBufferLike, byteOffset?: number, byteLength?: number) => T;

function asView<V, C extends ArrayBufferViewConstructor<V>>(
    TypedArray: C,
    v: BufferSource,
    byteOffset?: number,
    byteLength?: number,
  ): V{
    return undefined as V
  }

let a = asView(Uint8Array, new Uint32Array)
a
D.TS
declare type ArrayBufferViewConstructor<T> = new (buffer: ArrayBufferLike, byteOffset?: number, byteLength?: number) => T;
declare function asView<V, C extends ArrayBufferViewConstructor<V>>(TypedArray: C, v: BufferSource, byteOffset?: number, byteLength?: number): V;
declare let a: unknown;

I expected a is Uint8Array, but got unknown

Compiler Options
{
  "compilerOptions": {
    "strict": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": true,
    "strictBindCallApply": true,
    "noImplicitThis": true,
    "noImplicitReturns": true,
    "alwaysStrict": true,
    "esModuleInterop": true,
    "declaration": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "target": "ES2017",
    "jsx": "react",
    "module": "ESNext",
    "moduleResolution": "node"
  }
}

Playground Link: Provided

How do define the type make return type is Uint8Array ?

CodePudding user response:

Making use of the built-in InstanceType, there is no need for the generic parameter V. We just need to use it here, in the return type of the function:

): InstanceType<C> {

Playground

  • Related