टाइपस्क्रिप्ट: एक इंटरफ़ेस संपत्ति दूसरे पर निर्भर करती है

Aug 15 2020

क्या एक इंटरफ़ेस संपत्ति को दूसरे पर निर्भर करना संभव है?

उदाहरण के लिए मेरे पास:

const object = {
  foo: 'hello',
  bar: { hello: '123', },
}

और मैं यह सुनिश्चित करना चाहता हूं कि बार की कुंजी फू का मूल्य होना चाहिए ।

interface ObjectType = {
  foo: string;
  bar: { hello: string; } // instead of hardcoding have something like this? --> payload: { ValueOfFoo: string; }
}

धन्यवाद! :)

जवाब

5 AluanHaddad Aug 15 2020 at 23:39

आपको एक विशिष्ट स्ट्रिंग के प्रकार को पकड़ने के लिए एक सामान्य आवश्यकता है

interface ObjectType<K extends string> {
    foo: K;
    bar: { [P in K]: string };
}

फिर आप लिख सकते हैं

const object: ObjectType<'hello'> = {
    foo: 'hello',
    bar: { hello: '123', },
};

या, यदि आपके पास एक फ़ंक्शन है जो ऐसी वस्तु लेता है तो आप इंटरफ़ेस का उपयोग कर सकते हैं नियम को पूर्ण प्रकार की निष्कासन के साथ लागू करने के लिए

function useObject<K extends string>(o: ObjectType<K>) { }

useObject({
    foo: 'hello', 
    bar: { hello: '113' } // works
});

useObject({
    foo: 'hello', 
    bar: { world: '113' }
//         ^^^^^−−−−−−−−−−−− error, `world` should be `hello`
});

खेल का मैदान लिंक