Diagnostic üretimi
- TypeScript kursu
- Uzman
- Ders 11/35
- 4 dk
Kendi diagnostic'lerini üretmeyi öğrenirsin.
Konum bilgisi
Bir kural ihlali bulunduğunda hatayı konum bilgisiyle raporlarsın. node.getStart(sourceFile) düğümün başlangıç offsetini verir; ts.getLineAndCharacterOfPosition(sf, offset) ise { line, character } nesnesi döndürür. line 0-indekslidir.
const start = node.getStart(sf);
const { line } = ts.getLineAndCharacterOfPosition(sf, start);
console.log(`line ${line + 1}: hata`);Hata toplama
Hataları tek seferde toplamak için bir dizi kullanırsın. Her ihlalde errors.push(...) ile metin eklersin, en sonunda errors.join("\n") ile yazdırırsın. Bu kalıp TypeScript'in kendi diagnostic mekanizmasına benzer.
const errors: string[] = [];
// ihlal bulunca:
errors.push(`line ${line + 1}: mesaj`);
console.log(errors.join("\n"));Uygulama any türlerini raporla
Her biri ayrı satırda olmak üzere üç değişken içeren bir kaynak oluştur: let a: any = 1;, let b: number = 2; ve let c: any = 3;. visit fonksiyonu yaz: tür eklemesi any olan VariableDeclaration düğümlerini bul ve satır numarasıyla bir hatayı listeye topla. ts.forEachChild ile gez, sonuçları her satırda bir tane olacak biçimde yazdır.
Başlangıç kodu
import * as ts from "typescript";
// Üç satırlık kaynak: let a: any = 1; / let b: number = 2; / let c: any = 3;
// SourceFile oluştur
// visit fonksiyonu yaz: any türü olan VariableDeclaration bul
// Satır numarasıyla hatayı topla
// forEachChild ile gez
// Hataları her satırda bir tane olarak yazdır
// kodunu buraya yazÖrnek çözüm
import ts from "typescript";
const sourceText = 'let a: any = 1;\nlet b: number = 2;\nlet c: any = 3;';
const sf = ts.createSourceFile("app.ts", sourceText, ts.ScriptTarget.Latest, true);
const errors: string[] = [];
function visit(node: ts.Node) {
if (ts.isVariableDeclaration(node) && node.type?.kind === ts.SyntaxKind.AnyKeyword) {
const { line } = ts.getLineAndCharacterOfPosition(sf, node.getStart(sf));
errors.push(`line ${line + 1}: any`);
}
ts.forEachChild(node, visit);
}
visit(sf);
console.log(errors.join("\n"));Beklenen çıktı
line 1: any line 3: any
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 ts.getLineAndCharacterOfPosition(sf, offset) ne döndürür?
- { line, character } nesnesi Doğru cevap
- Sadece line numarası
- Bir offset numarası
- Bir Type nesnesi
Açıklama: getLineAndCharacterOfPosition bir { line, character } nesnesi döndürür; line 0-indekslidir. Type, tek line numarası veya offset döndürmez.
2 Satır numarasını al
const start = node.getStart(sf);
const pos = ts.____(sf, start);
console.log(pos.line + 1);
const start = node.getStart(sf);
const pos = ts.getLineAndCharacterOfPosition(sf, start);
console.log(pos.line + 1);
Açıklama: ts.getLineAndCharacterOfPosition bir { line, character } nesnesi döndürür; getLineOfPosition, getPosition ve getLineNumber diye yöntemler yoktur.
3 Hata raporlama parçaları
| Kavram | Anlamı |
|---|---|
node.getStart(sf) |
Başlangıç offsetini verir |
getLineAndCharacterOfPosition |
Satır ve sütun verir |
errors.push |
Hatayı listeye ekler |
errors.join |
Listeyi metne çevirir |