मेरे पास एक फ़ंक्शन logNumbers
है जो एक शब्दकोश को स्वीकार करता है जहां सभी कुंजियां तार होती हैं और सभी मान संख्याएं होती हैं। मैं logNumbers
को एक सख्त इंटरफ़ेस से संबंधित ऑब्जेक्ट के साथ कॉल करना चाहता हूं लेकिन फिर भी उन शर्तों को पूरा करता है।
interface NumberDictionary {
[key: string]: number;
}
interface StatisticsResult {
mean: number;
mode: number;
median: number;
}
function logNumbers(numDict: NumberDictionary) { ... }
const results: StatisticsResult = {
mean: 1,
mode: 2,
median: 2,
};
//
// Error:
// Argument of type 'StatisticsResult' is not assignable to parameter of type 'NumberDictionary'.
// Index signature is missing in type 'StatisticsResult'.
//
logNumbers(results);
मैं चाहता हूं कि StatisticsResult
वही रहे और logNumbers
के हस्ताक्षर को किसी तरह संशोधित करें। क्या इसे करने का कोई तरीका है? शायद मैं टाइपस्क्रिप्ट को संकेत दे सकता हूं कि numDict
में logNumbers
के भीतर कोई नई कुंजी नहीं जोड़ी जाएगी?
टाइपस्क्रिप्ट खेल के मैदान में प्रजनन
1 उत्तर
यदि आपका लक्ष्य केवल संख्या गुणों वाले किसी ऑब्जेक्ट तक फ़ंक्शन को प्रतिबंधित करना है, तो आप केवल संख्याओं के साथ एक रिकॉर्ड होने के लिए विवश एक सामान्य प्रकार पैरामीटर का उपयोग कर सकते हैं।
interface StatisticsResult {
mean: number;
mode: number;
median: number;
}
function logNumbers<T extends Record<keyof T, number>>(num: T) {
// Log the numbers as a table or something
}
const results: StatisticsResult = {
mean: 1,
mode: 2,
median: 2,
};
//ok
logNumbers(results);
संबंधित सवाल
नए सवाल
typescript
टाइपस्क्रिप्ट जावास्क्रिप्ट का एक टाइप किया हुआ सुपरसेट है जो सादे जावास्क्रिप्ट को संकलित करता है। यह जावास्क्रिप्ट में वैकल्पिक प्रकार, कक्षाएं, इंटरफेस और मॉड्यूल जोड़ता है। यह टैग टाइपस्क्रिप्ट के लिए विशिष्ट प्रश्नों के लिए है। इसका उपयोग सामान्य जावास्क्रिप्ट प्रश्नों के लिए नहीं किया जाता है।