कैसे करने के लिए ठीक से प्रकार की जाँच करें नेस्टेड रिकॉर्ड की अनुमति आंशिक सबट्री के साथ टाइपप्रति?

0

सवाल

पर एक नजर है कृपया निम्नलिखित डेमो.
interface Data को परिभाषित करता है एक स्कीमा के लिए नेस्टेड डेटा.
function check करेगा मान्य है कि क्या एक दिए गए आंशिक सबट्री के इस Data संरचना ठीक है और फेंक एक संकलन समय त्रुटि यदि नहीं, तो (उम्मीद है कि एक अधिक या कम विस्तृत और समझ में त्रुटि संदेश और नहीं बस "... है नहीं आबंटित टाइप करने के लिए 'कभी नहीं").

interface Data {
  namespace1: {
    keyA: string,
    keyB: string
  },

  namespace2: {
    keyC: string,
    keyD: string
  }
}

// This function's only purpose is to perform a compile-time check
// whether the given partial data is valid.
// Returns the first and only argument in case of success,
// otherwise a compile-time error will occur.
function check<??>(
  partialData: ????
): ?????? {
  return partialData
}

// Example 1 => okay
const validPartialData1 = check({
  namespace1: {
    keyB: 'b'
  }
})

// Example 2 => okay
const validPartialData2 = check({
  namespace1: {
    keyB: 'b'
  },

  namespace2: {
    keyC: 'c'
  }
})

// Example 3 => okay
const validPartialData3 = check({})

// Example 4 => compile-time error!
const invalidPartialData1 = check({
  namespace1: {
    keyC: 'c'
  }
})

// Example 5 => compile-time error!
const invalidPartialData2 = check({
  xyz: {
    keyA: 'a'
  }
})
1

सबसे अच्छा जवाब

1

आप की जरूरत नहीं है check समारोह. का उपयोग वैकल्पिक फ़ील्ड में सीधे.

interface Data {
  namespace1?: {
    keyA?: string,
    keyB?: string
  },

  namespace2?: {
    keyC?: string,
    keyD?: string
  }
}

const validPartialData1:Data = {
  namespace1: {
    keyB: 'b'
  }
}

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

यदि आप नहीं चाहते करने के लिए बदल Data प्रकार । आप को परिभाषित कर सकते हैं एक और PartialData

type NestPartial<T> = {
    [P in keyof T]?: NestPartial<T[P]>;
}
type PartialData = NestPartial<Data>

const validPartialData1: PartialData = {
    namespace1: {
        keyB: 'b'
    }
}

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

2021-11-24 01:24:39

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में