Το Type Inference είναι το TypeScript που καταλαβαίνει αυτόματα τύπους από το περιεχόμενο, ώστε να μην χρειάζεται να σημειώσετε τα πάντα. Συνάγει από αρχικές τιμές, return statements και χρήση.
let x = 10; // inferred: number
let s = "hi"; // inferred: string
const arr = [1, 2]; // inferred: number[]
const obj = { a: 1, b: "x" }; // inferred: { a: number; b: string }
Inference σε συναρτήσεις και callbacks
function double(n: number) { return n * 2; } // return inferred as number
[1, 2, 3].map(n => n * 2); // `n` inferred as number from the array — no annotation needed
Αυτή η συγκεκριμένη πληκτρολόγηση είναι ο λόγος για τον οποίο τα callbacks σπάνια χρειάζονται σημειώσεις παραμέτρων — το TypeScript ξέρει ότι το map σε ένα number[] περνάει έναν number.
let vs const widening
let a = "hello"; // widened to string (let can be reassigned)
const b = "hello"; // narrowed to the literal type "hello"
Το const συνάγει τον κυριολεκτικό τύπο επειδή δεν μπορεί ποτέ να αλλάξει· το let διευρύνεται στον γενικό τύπο. Αυτό έχει σημασία για τις ενώσεις:
const dir = "up"; // type "up"
let dir2 = "up"; // type string
Πότε να σημειώσετε ούτως ή άλλως
- Παράμετροι συναρτήσεων (δεν μπορούν να συναχθούν).
- Όταν η inference είναι πολύ ευρεία/στενή (π.χ. θέλετε
stringόχι το κυριολεκτικό). - Κενά δοχεία:
const xs = []συνάγειany[]— σημειώστε ωςnumber[].
Γιατί έχει σημασία
Η inference διατηρεί τον κώδικα TypeScript σχεδόν τόσο συνοπτικό όσο η JavaScript και παραμένει πλήρως εκτυπωμένος.
Η κατανόηση του πότε ενεργοποιείται (και πότε διευρύνεται) σας επιτρέπει να σημειώσετε μόνο όπου πραγματικά βοηθάει.
