ऑब्जेक्ट में बाकी मापदंडों को टाइप करने का तरीका टाइप करें
Nov 26 2020
function test(data){
console.log(data)
}
test({comments: 'hi', eat: true, sleep: true})
परीक्षण फ़ंक्शन में, मुझे यकीन है कि टिप्पणी तर्क दिखाई देगा, जहां अन्य तर्कों के लिए, गुण गतिशील हो सकते हैं, लेकिन मूल्य बूलियन प्रकार का होगा,
test({comments: 'hi', drink: true, sleep: true})
इस स्थिति पर विचार करते हुए, मुझे डेटा को सही तरीके से कैसे लिखना चाहिए? मैंने ऐसा कुछ करने की कोशिश की है, लेकिन यह गलत लगता है
function(data: {data: {comments: string, [key: string]: boolean})
जवाब
1 НиколайГольцев Nov 26 2020 at 17:55
मैं आपको कुछ प्रकार के समाधान सुझा सकता हूं:
function test<T extends {
[key: string]: any;
}>(data: { comments: unknown } & { [key in keyof T]: key extends "comments" ? string : boolean }) {
const comments = data.comments as string;
console.log(comments);
console.log(data.eat);
console.log(data.sleep);
}
test({comments: "hi"}); // works
test({comments: "hi", eat: true}); // works
test({comments: true}); // doesn't works
test({comments: 5}); // doesn't works
test({comments: "hi", eat: "true"}); // doesn't works
test({comments: "hi", eat: 5}); // doesn't works
यह फ़ंक्शन के शरीर के बाहर अच्छी तरह से टाइप करता है, लेकिन data.comments
सही ढंग से टाइप करने के लिए फ़ंक्शन के शरीर में आपको कुछ संकीर्णता जोड़ना चाहिए।