τι είδους θεωρητής βεβαιώνει κάνω εγώ πρέπει να πάρει αυτό για τη σύνταξη;
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]],
];
Αυτό λέει έχετε ένα δισδιάστατο πίνακα των οποίων οι τιμές μπορεί να είναι οτιδήποτε (Foo, Bar, άλλες συστοιχίες, κλπ). Μπορείτε επίσης να χρησιμοποιήσετε έναν ισχυρισμό τύπου για ένθετων πινάκων σας:
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[])[][]