कैसे परिभाषित करने के लिए एक कस्टम टाइपप्रति परिभाषा की एक सरणी है, जहां सभी तत्वों की संख्या को छोड़कर पहले

0

सवाल

सरणियों में सवाल कर रहे हैं एसवीजी पथ क्षेत्रों, उदाहरण के लिए, ['L', 0, 0] मैं मूल रूप से इस का उपयोग को परिभाषित करने के लिए इन सरणियों:

// doSomethingToSegment.js

/** @type {Object.<string, number>} */
const paramsCount = {
  a: 7, c: 6, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, z: 0,
};
  
/**
 * This definition is WRONG, FIX ME!!
 *
 * @typedef {(string|number)[]} segment
 */

/**
 * Check segment validity.
 *
 * @param {segment} seg input segment
 * @return {boolean} segment is/not valid
 */
function checkSegment(seg) {
  const [pathCommand] = seg;
  const LK = pathCommand.toLowerCase();
  const UK = pathCommand.toUpperCase();
  const segmentValues = seg.slice(1);
  const expectedAmount = paramsCount[LK];

  return checkPathCommand(UK) && checkPathValues(segmentValues, expectedAmount);
}

/**
 * @param {string} ch input character
 * @returns {boolean} true when `ch` is path command
 */
function checkPathCommand(ch) {
  return ('ACHLMRQSTVZ').includes(ch);
}

/**
 * @param {Number[]} values input values
 * @param {Number} expected amount
 * @return {boolean} segment has/not the right amount of valid numbers
 */
function checkPathValues(values, expected) {
  return values.length === expected && values.every(x => !Number.isNaN(x));
}

अब pathCommand.toLowerCase() कॉल फेंकता है इस त्रुटि है:

Property 'toLowerCase' does not exist on type 'string | number'.
  Property 'toLowerCase' does not exist on type 'number'.

और segmentValues फेंकता है, यह एक:

Argument of type '(string | number)[]' is not assignable to parameter of type 'number[]'.
  Type 'string | number' is not assignable to type 'number'.
    Type 'string' is not assignable to type 'number'.

तो, कैसे परिभाषित करने के लिए एक कस्टम प्रकार परिभाषा @type {WHAT} segment) को संतुष्ट करता है कि इस विशिष्ट की जरूरत है?

ecmascript-6 javascript typescript
2021-11-22 15:33:56
1

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

2
type A = [string, ...number[]];

के बारे में अधिक जानकारी बाकी तत्वों में टपल प्रकार: https://www.typescriptlang.org/docs/handbook/2/objects.html#tuple-types

यहाँ से उदाहरण हैं डॉक्स:

Tuples भी कर सकते हैं बाकी है, जो तत्वों, होना करने के लिए है एक सरणी/टपल प्रकार ।

type StringNumberBooleans = [string, number, ...boolean[]];
type StringBooleansNumber = [string, ...boolean[], number];
type BooleansStringNumber = [...boolean[], string, number];
2021-11-22 15:49:59

त्वरित प्रश्न: कर सकते हैं इस पाने के लिए अपनाया टपल वस्तुओं? की तरह कुछ {type: string, ...{string, number}[]}, मैं परीक्षण सब कुछ किया इसे पाने के लिए नहीं काम करने के लिए.
thednp

क्षमा करें, मैं काफी समझ में नहीं आता । शायद तुम पोस्ट सकता है एक नया स्टैक ओवरफ़्लो सवाल का एक बिट के साथ और अधिक विस्तार?
Anastasia

सटीक एक ही बात है, लेकिन वस्तुओं के लिए, के बजाय [string, ...number[]] यह संभव है करने के लिए की तरह कुछ है {myString: string, ...{string, number}[]].
thednp

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

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

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

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

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