Closed brendankenny closed 3 years ago
I found that even we put ParseSelector<S>
as return type, overriding still works.
معلمة النوع
E
فيquerySelector
/querySelectorAll
shim:يمكن أن تتسبب في أشكال غير مرغوب فيها من النوع اعتمادًا على سياق الاستخدام. المشكلة هي أن معلمة النوع
E
تستخدم فقط في نوع الإرجاع. إذا كان السياق يوفر نوعًا يمتدElement
، فسيستخدمه المترجم بسعادة بدلاً من الافتراضيParseSelector<S>
.على سبيل المثال:
CONST مرساة : HTMLAnchorElement | خالية = وثيقة . querySelector ( 'div' ) ؛ // لا يوجد خطأ. // querySelector type هو `ParentNode.querySelector <" div "، HTMLAnchorElement> (المحدد:" div "): HTMLAnchorElement | خالية
نتائج const : صفيف < HTMLAnchorElement | خالية > = [ ] ؛ النتائج . push ( document . querySelector ( 'div' ) ) ؛ // لا يوجد خطأ (نوع محدد الاستعلام هو نفسه كما هو مذكور أعلاه).
من ناحية أخرى ، تسمح هذه الميزة لميزة تجاوز نوع العنصر ، كما هو الحال في
وثيقة . querySelector < MyComponent > ( 'my-web-component' ) // ==> MyComponent
لذلك لست متأكدًا من أفضل حل (إن وجد). من السهل أيضًا أن يقوم مستخدمو المكتبة بعمل أعمالهم الخاصة
محدد الاستعلام < S يوسع السلسلة > ( المحدد : S ) : ParseSelector < S > | لاغية ؛
shim إذا كانت هذه هي وظيفتهم المفضلة.
The type parameter
E
in thequerySelector
/querySelectorAll
shim:https://github.com/g-plane/typed-query-selector/blob/823e4b850280dab7192cd0468b8e97c196e9e8ec/shim.d.ts#L5-L7
can cause undesired type casts depending on the context of use. The problem is that the type parameter
E
is used only in the return type. If the context provides a type that extendsElement
, the compiler will happily use that instead of the default ofParseSelector<S>
.For example:
On the other hand, this feature allows the element type overriding feature, like in
so I'm not sure what the best fix would be (if any). It's also easy enough for users of the library to do their own
shim if that's their preferred functionality.