TypeScript yorumları JavaScript yorumlarıdır: satırın geri kalanı için //, bir blok için /* */. /** ile başlayan bir blok yorum bir dokümantasyon yorumudur (JSDoc); editörler onu, belgelediği şeyin üzerine geldiğinizde gösterir. Bunun yanında TypeScript, derleyicinin kodunuzu nasıl kontrol ettiğini değiştiren birkaç özel yorumu da okur.
Çıktı:
212
Yorumlar programı etkilemez. Aşağıda anlatılan direktif yorumları dışında tip kontrolünü de etkilemezler.
Tek Satırlık ve Blok Yorumlar
// satırda kendisinden sonraki her şeyi yoruma çevirir; bu aynı zamanda bir kod satırını devre dışı bırakmanın hızlı yoludur. /* */ bir satırın ortasında durabilir ya da çok sayıda satırı kapsayabilir.
Blok yorumlar iç içe geçmez. İlk */ yorumu bitirir, bu yüzden zaten blok yorum içeren bir kodu sarmak onu bozar:
/* outer comment /* inner comment */ this text is now code */
Derleyici bu durumda this text is now code */ kısmını kod olarak okumaya çalışır ve bir sözdizimi hatası bildirir. Blok yorumlar içeren bir bölgeyi yoruma almak için her satırda // kullanın; çoğu editör bunu Ctrl+/ (macOS'ta Cmd+/) ile yapar.
JSDoc Dokümantasyon Yorumları
Bir fonksiyonun, sınıfın, metodun, özelliğin, interface'in veya değişkenin hemen önündeki bir /** ... */ yorumu onu belgeler. Editörler metnini üzerine gelince açılan ipucunda ve otomatik tamamlamada gösterir; TypeDoc gibi dokümantasyon üreteçleri de onu referans sayfalarına dönüştürür. TypeScript kodundaki bu yorumlar için Microsoft'un başlattığı bir standart olan TSDoc, yaygın etiketlerde aynı sözdizimini kullanır:
| Etiket | Anlamı |
|---|---|
@param name description | Bir parametreyi açıklar |
@returns description | Dönüş değerini açıklar |
@throws description | Fonksiyonun fırlatabileceği bir hatayı açıklar |
@example | Genellikle ardından bir kod bloğu gelen bir örnek bloğu başlatır |
@deprecated reason | Bir API'yi kullanımdan kaldırılmış olarak işaretler; editörler onu |
@see veya {@link Name} | İlgili koda işaret eder |
@remarks | Özet satırından sonra daha uzun açıklama |
Bir .ts dosyasında tipleri JSDoc'ta tekrarlamayın. Tipler koddaki notasyonlardır ve JSDoc tip etiketleri orada yok sayılır: /** @type {string} */ const v: number = 5; hiçbir şikayet olmadan derlenir, çünkü yalnızca : number dikkate alınır.
Bir editörde, projenin herhangi bir yerinde transfer veya balance üzerine gelmek bu açıklamaları gösterir.
Kodu Kullanımdan Kaldırılmış Olarak İşaretlemek
@deprecated bir derleme hatasına yol açmaz. Editörlere, kullanımdan kaldırılan fonksiyonun her kullanımını üstü çizili ve nedeni üzerine gelince görünecek şekilde göstermelerini söyler; çağıranları bir alternatife yönlendirmenin nazik yolu budur:
Çıktı:
$19.99
19.99 EUR
@ts-expect-error ve @ts-ignore
Bu iki yorum, kendilerinden sonraki satırdaki tip hatalarını susturur. Bazen doğru karar budur: bir fonksiyonun hatalı girdiyi çalışma zamanında nasıl ele aldığını kontrol eden bir test ya da bir kütüphanenin tiplerindeki bilinen bir eksik.
Çıktı:
runtime error: text.toUpperCase is not a function
Yorum olmadan shout(42) bir derleme hatasıdır (TS2345). Yorumla birlikte dosya derlenir ve çağrı çalışma zamanına ulaşır; bu testin amacı da budur.
İki direktif arasındaki fark, hata ortadan kalktığında ortaya çıkar. @ts-expect-error susturulacak bir hata olmasında ısrar eder, bu yüzden eskimiş bir yorum kendisi bir hataya dönüşür:
index.ts(6,1): error TS2578: Unused '@ts-expect-error' directive.
Aynı yerdeki // @ts-ignore ise hem hata varken hem de hata gittikten sonra sessiz kalır. @ts-expect-error bu yüzden daha iyi bir varsayılandır: biri tipleri düzelttiğinde derleyici size susturmanın kaldırılabileceğini söyler. Bir sonraki okuyucu neden orada olduğunu bilsin diye, yukarıdaki örnekteki gibi direktiften sonra her zaman bir neden ekleyin.
İkisi de yalnızca sonraki satırı ve o satırdaki tüm hataları kapsar. Bir değerin tamamı için kaçış gerekiyorsa açık bir as unknown as T ya da bir çalışma zamanı kontrolü, susturma yorumundan genellikle daha anlaşılırdır.
@ts-nocheck ve @ts-check
Bir dosyanın en üstündeki // @ts-nocheck, o dosyanın tamamı için tip kontrolünü kapatır. İlk sırada, her koddan önce gelmelidir: daha aşağıya konursa yok sayılır ve hatalar yine görünür.
// @ts-nocheck
const n: number = "not a number"; // no error reported
Büyük bir JavaScript kod tabanını taşırken işe yarar, başka her yerde kötü bir işarettir.
// @ts-check bir JavaScript dosyasında tersini yapar: tsconfig.json içinde checkJs kapalı olsa bile o .js dosyası için çıkarım ve JSDoc tiplerini kullanarak tip kontrolünü açar (dosyanın yine de allowJs ile projeye dahil olması gerekir):
// @ts-check
/**
* @param {number} cents
* @returns {string}
*/
function formatCents(cents) {
return (cents / 100).toFixed(2);
}
formatCents("12"); // error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
JavaScript dosyalarında JSDoc etiketleri tiplerin ta kendisidir; pek çok proje dosyaları .ts dosyasına dönüştürmeden tip kontrolünü böyle elde eder.
Triple-Slash Direktifleri
Bir dosyanın en üstündeki /// <reference ... /> biçimindeki bir yorum bir derleyici direktifidir:
/// <reference types="node" />
/// <reference lib="es2023.array" />
/// <reference path="./globals.d.ts" />
types="node", programa bir@typespaketi ekler;tsconfig.jsoniçindeki"types"listesine eklemek gibi.lib="...", programa yerleşik bir kütüphane ekler;libseçeneği gibi.path="...", başka bir dosyayı dahil eder; çoğunlukla.d.tsdosyalarının içinde kullanılır.
Uygulama kodunda import ifadeleri ve tsconfig.json ayarları neredeyse her kullanımın yerini alır; bu direktiflerle çoğunlukla bildirim dosyalarında ve Vite'ın vite-env.d.ts dosyası gibi üretilmiş kodda karşılaşırsınız. Kısa bir gösterim olarak lib, bu dosyada daha yeni bir dizi metodunu kullanılabilir hale getirir:
Derlenmiş Çıktıdaki Yorumlar
tsc yazdığı JavaScript'te yorumları korur. Onları silmek için "removeComments": true ayarlayın; /*! ile başlayan yorumlar bu durumda bile kalır, lisans başlıkları için gelenek budur:
/*! MyLib v1.2.0 | MIT License */
declaration açıkken JSDoc yorumları .d.ts dosyalarına da kopyalanır, böylece bir kütüphanenin kullanıcıları açıklamaları kendi editörlerinde görür.
Sıkça Sorulan Sorular
TypeScript'te yorum nasıl yazılır?
JavaScript'teki gibi: // satır sonuna kadar süren bir yorum başlatır, /* ... */ ise birkaç satıra yayılabilen bir yorumu sarar. /** ile başlayan bir blok yorum bir dokümantasyon (JSDoc) yorumudur; editörler, belgelenen fonksiyonun, sınıfın veya özelliğin üzerine geldiğinizde onu gösterir.
@ts-ignore ile @ts-expect-error arasındaki fark nedir?
İkisi de bir sonraki satırdaki tip hatalarını susturur. // @ts-expect-error ayrıca orada bir hata olduğunu kontrol eder: satırda artık hata kalmazsa derleyici error TS2578: Unused '@ts-expect-error' directive. bildirir, böylece eskimiş susturmalar fark edilir. // @ts-ignore ise sonsuza kadar sessiz kalır. @ts-expect-error tercih edin.
Bütün bir dosyada TypeScript hatalarını nasıl yok sayarım?
Dosyanın en üstüne, her koddan önce // @ts-nocheck koyun. Derleyici o dosya için hiçbir tip hatası bildirmez (sözdizimi hataları yine görünür). Bu bir taşıma aracıdır; tek bir satır için bunun yerine // @ts-expect-error kullanın.
Yorumlar derlenmiş JavaScript'e geçer mi?
Evet, varsayılan olarak tsc yorumları çıktıda tutar. "removeComments": true ile onları siler; lisans başlıkları için korunan /*! ile başlayan yorumlar hariç. Bundler'lar ve minifier'lar genellikle production derlemelerinde onları kaldırır.
Bir .ts dosyasında tipleri JSDoc yorumlarına yazmalı mıyım?
Hayır. .ts dosyalarında @type {string} veya @param {number} x gibi JSDoc tip etiketleri tip kontrolünde yok sayılır; tipler koddaki notasyonlardır. .ts dosyalarında JSDoc'u açıklamalar için, JSDoc tiplerini ise yalnızca // @ts-check veya checkJs ile kontrol edilen .js dosyalarında kullanın.