2017-12-24 93 views
10

मैं हर जगह सख्त प्रवाह टाइपिंग के साथ एक जावास्क्रिप्ट प्रोजेक्ट लिखने की कोशिश कर रहा हूं। मेरे पास big-integer पर निर्भरता भी है। दुर्भाग्यवश flow-typed में कोई पूर्व निर्धारित प्रवाह एनोटेशन नहीं है और Google इस विषय पर कुछ भी उपयोगी नहीं दे रहा है।फ़ील्ड वाले फ़ंक्शन के लिए फ़्लो प्रकार कैसे घोषित करें?

बहुत सारे जावास्क्रिप्ट पैकेज की तरह, big-integer एक एकल फ़ंक्शन निर्यात करता है, जिसे आमतौर पर bigInt कहा जाता है। इसे सीधे कहा जा सकता है, जैसे: bigInt(13), bigInt("134e134"), आदि, जो ऑब्जेक्ट्स बनाता है जो बड़े पूर्णांक हैं (मैंने इस फ़ंक्शन के रिटर्न वैल्यू के प्रकार को "बिगइंटर" नामक "क्लास" नामक कॉल करने का निर्णय लिया है प्रलेखन - लेकिन मुझे नहीं लगता कि आंतरिक वास्तव में कक्षाओं का उपयोग करते हैं क्योंकि मुझे लगता है कि पैकेज ES6 से पहले बाहर आया था)।

यह फ़ंक्शन के आउटपुट के लिए ठीक काम करता है और मैं उस वर्ग के तरीकों को संलग्न कर सकता हूं और हम सभी अच्छे हैं। हालांकि, bigInt में कुछ विधियां हैं, उदा। bigInt.lcm(123, 234)। मैं इसे कैसे दस्तावेज कर सकता हूं?

declare module "big-integer-types" { 
    declare class BigInteger { 
    add(addend: BigIntInput): BigInteger; 
    minus(subtractand: BigIntInput): BigInteger; 
    /* snip */ 
    } 
    declare type BigIntInput = number | string | BigInteger; 
    declare type BigIntFn = (void | number | string | BigInteger) => BigInteger; 
} 

declare module "big-integer" { 
    import type { BigIntFn } from "big-integer-types"; 
    declare export default BigIntFn 
} 

यह क्षेत्रों बड़ा पूर्णांक , उदा के लिए अच्छी तरह से काम करता है टाइप-चेकिंग bigInt(12).plus("144e53") के लिए। जो माहान है। लेकिन इसमें bigInt.lcm(134, 1551) शामिल नहीं है और यह प्रवाह त्रुटि देता है।

विकल्प मॉड्यूल के निर्यात को टाइप करने के लिए घोषित करना है जिसमें कुछ संबंधित कार्य हैं। उदाहरण के लिए:

declare module "big-integer-types" { 
    declare type BigIntegerStaticMethods { 
    lcm(a: BigIntInput, b: BigIntInput): BigInteger, 
    /* snip */ 
    } 

    declare type BigIntInput = number | string | BigInteger; 
} 

declare module "big-integer" { 
    import type BigIntegerStaticMethods from "big-integer-types"; 
    declare export default BigIntegerStaticMethods 
} 

यह स्थिर तरीकों के लिए काम करता है, लेकिन मैं कैसे एक "प्रकार" कहने के लिए पता नहीं है कहा जाता है हो सकता है। तो मैं एक बार में दोनों को कैसे प्राप्त करने के लिए एक नुकसान में हूँ।

यह अजीब लगता है क्षेत्रों के साथ एक समारोह जावास्क्रिप्ट में बहुत आम है और प्रवाह प्रलेखन सुझाव है कि वे प्रकार सिस्टम का समर्थन जावास्क्रिप्ट के रूप में यह प्रयोग किया जाता है के लिए प्रयास का एक बहुत माध्यम से चला गया है। तो मुझे लगता है कि इसे प्राप्त करने के लिए एक प्रवाह वाक्यविन्यास है, मैं बस यह नहीं समझ सका कि यह क्या था, और इसे दस्तावेज़ों में नहीं मिला।

उत्तर

4

आप कक्षा में एक अनाम स्थिर समारोह की घोषणा कर सकते हैं:

declare type BigIntInput = number | string | BigInteger; 
declare class BigInteger { 
    add(addend: BigIntInput): BigInteger; 
    minus(subtractand: BigIntInput): BigInteger; 

    static lcm(a: BigIntInput, b: BigIntInput): BigInteger; 
    static (data?: BigIntInput): BigInteger; 
} 

BigInteger.lcm(1,2); 
BigInteger(4).add(5); 
+0

मैं क्यों इस सवाल का जवाब तो कई upvotes आकर्षित कर रहा है यकीन नहीं है। यह काम नहीं करता। अज्ञात स्थैतिक फ़ंक्शन प्रवाह द्वारा पहचाना नहीं जाता है और प्रवाह त्रुटि का कारण बनता है। –

+0

क्या आप त्रुटि के बारे में विस्तृत कर सकते हैं? यह कोड मेरे लिए [फ़्लो/Try] (https://flow.org/try/) पर असफल नहीं होता है, इसी तरह हम ऐसी स्थितियों के लिए हमारे कोडबेस पर उपयोग करते हैं। – user3707125

संबंधित मुद्दे