[Guidelines Proposal] Change consensus requirements
Problem
Current contributor guidelines requires 2 major browser engines to implement a new Web API for its definition to be added to TS DOM types. https://github.com/microsoft/TypeScript-DOM-lib-generator#why-is-my-fancy-api-still-not-available-here
Seeing as Blink possesses >75% of browser engine market share and is by FAR the quickest engine to implement new web standards and standard proposals, this requirement causes unnecessary hassle and possible runtime errors if manually defined types are incorrect.
For example: https://x.com/CodeWShreyans/status/2000710168980377885?s=20 The Web Navigation API was added to the HTML Spec in 2022, shortly followed by Blink's implementation later the same year. Webkit released their implementation 3 days ago, over 3 years after Blink. Gecko still does not support it.
Solution
Add types to TS when a standard is supported by one major browser engine AND published to the official HTML spec. However to encourage safe use, the type can be possibly undefined until implemented by two major browser engines.
For example:
interface Window {
navigation: Navigation | undefined
}
Duplicate of #998
@Bashamega not a duplicate, #998 talks about just one part of the solution, not the proposal itself
Doing this would improperly guide people to write a bunch of web-incompatible code. The two-implementation requirement serves as a way to achieve a balance between web compatibility and usability.
And also Navigation API is getting a bunch of specification feedback after having multiple implementations as it's very complex and still missed details, so it's kinda a bad example.
Welcome to the dragon's maw. Navigation, session history, and the traversal through that session history are some of the most complex parts of this standard.
(ICYMI, #2276 added Navigation API which you should be able to use via @types/web.)
I fully agree with saschanaz, it would result in websites being broken for users not on Chrome, and that'd be problematic for the web long-term. It's best to allow standards to be implemented across browsers before the types are available in TypeScript.