मैं विभिन्न तर्क प्रकारों के साथ फ़ंक्शन प्रकारों का एक संघ बनाने की कोशिश कर रहा हूं, लेकिन संघ प्रकार में तर्क 'कभी नहीं' बन जाता है। मैं संघ प्रकार को तर्क के रूप में उपयोग कर सकता हूं और मुझे जो परिणाम चाहिए, या फ़ंक्शन ओवरलोडिंग का उपयोग कर सकता हूं, लेकिन कुछ प्रकार के फ़ंक्शन प्रकारों के संघ की अनुमति नहीं है। यहाँ कोड उदाहरण है:

type FnA = (arg: 'a') => any;
type FnB = (arg: 'b') => any;
type Fn = FnA | FnB;
declare const fn: Fn;
fn('a'); // Argument of type 'string' is not assignable to parameter of type 'never'

क्या यह एक बग है या यह इरादा के अनुसार काम करता है?

2
dm33tri 26 जिंदा 2021, 11:06

1 उत्तर

सबसे बढ़िया उत्तर

यह इरादा है। लेकिन, ओवरलोडिंग करने के लिए, आपको यूनियन | के बजाय चौराहे & का उपयोग करना चाहिए।

यहाँ काम कर रहे कोड है:

type FnA = (arg: 'a') => any;
type FnB = (arg: 'b') => any;
type Fn = FnA & FnB;
declare const fn: Fn;
fn('a'); //  ok
5
captain-yossarian 26 जिंदा 2021, 11:08