Microsoft/TypeScript

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

Open

#52,430 建立於 2023年1月26日

在 GitHub 查看
 (7 留言) (0 反應) (0 負責人)TypeScript (6,726 fork)batch import
BugDomain: check: Control FlowHelp Wanted

倉庫指標

Star
 (48,455 star)
PR 合併指標
 (平均合併 6天 17小時) (30 天內合併 9 個 PR)

描述

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

貢獻者指南