Microsoft/TypeScript

Assertion type function not working as expected with everything but ES3 since >=4.9.4

Open

#52,430 opened on Jan 26, 2023

View on GitHub
ย (7 comments)ย (0 reactions)ย (0 assignees)TypeScriptย (48,455 stars)ย (6,726 forks)batch import
BugDomain: check: Control FlowHelp Wanted

Description

Bug Report

๐Ÿ”Ž Search Terms

Assert, Assert Function, Assert Class Constructor

๐Ÿ•— Version & Regression Information

>=4.9.4

- This is a crash

  • This changed between versions 4.8.4 and >=4.9.4
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about _________
  • I was unable to test this on prior versions because it works as expected

โฏ Playground Link

https://www.typescriptlang.org/play?target=0&ts=5.0.0-dev.20230126#code/KYDwDg9gTgLgBDAnmYcCCAjAzjKBDAYxgBVlgAeYuAXjjwDtEA+GuACj210PnuAHd2AOhF4oAcywAuOowDaAXQCUNFsRUAyOADEArvSIBLCPQDcAKFCRYCMnADCJglGAxgpFJVYNmrNn0E2ESExSRkfRRVqNU0dfSMTCytoeCQUOA8KKlofFlpMHHwiTMoWAB8HJxc3EuImC0twFLhDejcoADNCVALuIjQsLGBYY3osOABvczgWsZgGAgoAUXBgInHQN3oAE3GS-QBregh+eiYmNmmZuiJdPAAbGUPj04AaK5mrNZhpOBWUdbvGZKcKDYY-G4wO73FrjACScwW7jI5H+3yw9XMAF9zI1rPACCYcHQwbAZL0ijABkMRkTWFMZq0cEiOLcHq84F91ioGddqrooPRIdDZsyDMAIB1Oat1hYZlj3liGvdXHAQKwAIwk2SIcx4UkwIRM+bitggDlLKBQaBKPUGo2I03muAAETwbiUQA

๐Ÿ’ป Code

export type AbstractType<T = any> = (abstract new (...args: any[]) => T) & Function;
export type ConcreteType<T = any> = (new (...args: any[]) => T) & Function;
export type Type<T = any> = AbstractType<T> | ConcreteType<T>;

export interface AbstractAssertions {
  instance<Expects extends Type<unknown>>(
    actual: unknown,
    expects: Expects,
  ): asserts actual is InstanceType<Expects>;
}

export const assert: AbstractAssertions = {
  instance(actual, expects) {
    return actual instanceof expects;
  },
};

let x = 1 as any
assert.instance(x, Error) // Error here
assert.instance(x, Date) // Error here

๐Ÿ™ Actual behavior

Show Type Error when not supposed to

๐Ÿ™‚ Expected behavior

Assert type as expected

Contributor guide

Assertion type function not working as expected with everything but ES3 since >=4.9.4 ยท Microsoft/TypeScript#52430 | Good First Issue