π Search Terms
element matches narrow never
π Version & Regression Information
- This changed between versions 5.9.3 and 6.0.3
β― Playground Link
https://www.typescriptlang.org/play/?ts=6.0.3#code/CYUwxgNghgTiAEEQBd4iQWxAO2QLngAkAVAWQBkBRTHZAbgCgBCdELXAOgymTAAsQAZwAU8AOTBkY+AEp4AMnloanbrwEjxwYNJlA
π» Code
declare let element: HTMLElement;
!element.matches( 'dt' ) && element.matches( 'dd' )
π Actual behavior
element.matches( 'dd' ) throws a Property 'matches' does not exist on type 'never' compilation error.
π Expected behavior
element.matches( 'dd' ) does not throw any error.
Additional information about the issue
element.matches( 'dt' ) uses the following overload:
matches<K extends keyof HTMLElementTagNameMap>(selectors: K): this is HTMLElementTagNameMap[K];
The return type of element.matches( 'dt' ) is then this is HTMLElementTagNameMap['dt'] that maps to this is HTMLElement.
Since this is HTMLElement:
- When false, the type of
element is HTMLElement (not narrowed further).
- When false, the type of
element is never.
π Search Terms
element matches narrow never
π Version & Regression Information
β― Playground Link
https://www.typescriptlang.org/play/?ts=6.0.3#code/CYUwxgNghgTiAEEQBd4iQWxAO2QLngAkAVAWQBkBRTHZAbgCgBCdELXAOgymTAAsQAZwAU8AOTBkY+AEp4AMnloanbrwEjxwYNJlA
π» Code
π Actual behavior
element.matches( 'dd' )throws aProperty 'matches' does not exist on type 'never'compilation error.π Expected behavior
element.matches( 'dd' )does not throw any error.Additional information about the issue
element.matches( 'dt' )uses the following overload:The return type of
element.matches( 'dt' )is thenthis is HTMLElementTagNameMap['dt']that maps tothis is HTMLElement.Since
thisisHTMLElement:elementisHTMLElement(not narrowed further).elementisnever.