किस प्रकार मैं इस संकलन करने के लिए मिल की जरूरत है पाता है?
class Foo {}
class Bar {}
var f =
[
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
त्रुटि:
Incompatible types in array literal expression
किस प्रकार मैं इस संकलन करने के लिए मिल की जरूरत है पाता है?
class Foo {}
class Bar {}
var f =
[
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
त्रुटि:
Incompatible types in array literal expression
यह काम करेगा:
class Foo {}
class Bar {}
var f: any[][] = [
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
यह कहते हैं कि आप एक दो आयामी सरणी जिनके मान कुछ भी (फू, बार, अन्य सारणियों, आदि) हो सकता है। आप भी अपनी नेस्टेड सरणियों के लिए एक प्रकार का दावा इस्तेमाल कर सकते हैं:
class Foo {}
class Bar {}
var f = [
[<any>Foo, [1, 2, 3]],
[<any>Bar, [7, 8, 9]],
];
भीतरी सरणी में किसी भी एक भी की उपस्थिति संकलक के रूप में किसी भी [] अपने प्रकार अनुमान लगाने के लिए बाध्य करती है।
ऐसा लगता है कि टाइपप्रति की तरह करता है अब विषम सरणियों की है। तो, के बाद से यह सवाल पहले आया था जब मैं इस के लिए देखा है, और के बाद से यह यह अन्यथा लगता है, यहाँ मुश्किल है कि कैसे इस कोड अब लिखा जा सकता है:
class Foo {}
class Bar {}
var f: [Foo|Bar, number[]][] =
[[new Foo(), [1, 2, 3]],
[new Bar(), [7, 8, 9]]];
(अब अगर इस भाव की नकल उतार प्रकार वाक्य रचना की सड़क के नीचे चला जाता है, प्रकार भी की एक वाक्य रचना मिलेगा [Foo|Bar, [...number]][]...)
यह भी समारोह तर्क के साथ काम करता है, तो यह ठीक typechecks:
function foo([obj,nums]: [Foo|Bar, number[]]) {
for (let i of nums) console.log(`i = ${i}`);
}
f.forEach(foo);
और चरम संस्करण:
f.forEach(([obj,nums]: [Foo|Bar, number[]]) => {
for (let i of nums) console.log(`i = ${i}`); });
टाइपप्रति 1.4 के रूप में आप प्रकार यूनियनों कर सकते हैं। मैं बहुत की तरह यह पूरा करने में सक्षम था:
function zip<T, X> (array1: T[], array2: X[]): (T|X)[][] {
return array1.map(function (v: T, i: number) { return [v, array2[i]]; });
}
विशिष्ट प्रकार आप के लिए अपनी मामला होगा विचार करना होगा:
(Foo|Bar|number[])[][]
या:
(typeof Foo|typeof Bar|number[])[][]