Menu

TypeScript Yorum Satırları: JSDoc, @ts-ignore, @ts-expect-error

TypeScript, JavaScript'in // ve /* */ yorumlarını ve editörlerin üzerine gelince gösterdiği JSDoc /** */ yorumlarını kullanır. Ayrıca birkaç özel yorumu okur: @ts-expect-error, @ts-ignore, @ts-nocheck, @ts-check ve /// <reference> direktifleri.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

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:

EtiketAnlamı
@param name descriptionBir parametreyi açıklar
@returns descriptionDönüş değerini açıklar
@throws descriptionFonksiyonun fırlatabileceği bir hatayı açıklar
@exampleGenellikle ardından bir kod bloğu gelen bir örnek bloğu başlatır
@deprecated reasonBir API'yi kullanımdan kaldırılmış olarak işaretler; editörler onu üstü çizili gösterir
@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 @types paketi ekler; tsconfig.json içindeki "types" listesine eklemek gibi.
  • lib="...", programa yerleşik bir kütüphane ekler; lib seçeneği gibi.
  • path="...", başka bir dosyayı dahil eder; çoğunlukla .d.ts dosyaları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.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA