Literal Types
Genel tiplerin yanı sıra doğrudan kendi string
ve number
değişkenlerimizle de tipler oluşturabiliriz. Tıpkı JavaScript'in var
ve let
ile tanımlanmış değişkenlerinin değişebildiği ancak const
ile tanımlanan değişkenlerin değişmemesi gibi TypeScript'te de değişmeyecek tipler oluşturabiliriz.
let x: "hello" = "hello";
✅ // OK
x = "hello";
x = "howdy";
🚨 Type '"howdy"' is not assignable to type '"hello"'.
Tek başına bir tip oluşturmanın bize pek bir faydası yok gibi. Ancak bu literal
tipleri birer union
tipe dönüştürdüğünüzü düşünün:
function printText(s: string, alignment: "left" | "right" | "center") {
// ...
}
printText("Hello, world", "left");
printText("G'day, mate", "centre");
🚨 Argument of type '"centre"' is not assignable
to parameter of type '"left" | "right" | "center"'.
Bu yapıyı literal olmayan tiplerle beraber de kullanabiliriz:
interface Options {
width: number;
}
function configure(x: Options | "auto") {
// ...
}
configure({ width: 100 });
configure("auto");
configure("automatic");
🚨 Argument of type '"automatic"' is not assignable to parameter of type 'Options | "auto"'.