Özet - Custom type checker
- TypeScript kursu
- Uzman
- Ders 12/35
- 4 dk
Özel bir kural denetleyici yazarsın.
Mini type checker
Bir mini type checker üç parçayı birleştirir: ts.forEachChild ile AST'yi gezer, ts.isVariableDeclaration gibi koruyucularla ilgilendiğin düğümleri tanır, ts.getLineAndCharacterOfPosition ile ihlalin konumunu raporlar. Hataları bir dizide toplar, en sonunda yazdırırsın.
function visit(node: ts.Node) {
if (ts.isVariableDeclaration(node) && !node.type) {
const { line } = ts.getLineAndCharacterOfPosition(sf, node.getStart(sf));
errors.push(`line ${line + 1}: missing type`);
}
ts.forEachChild(node, visit);
}Uygulama Türü eksik değişkenleri raporla
Her biri ayrı satırda olmak üzere üç değişken içeren bir kaynak oluştur: let x = 1;, let y: string = "a"; ve let z = true;. visit fonksiyonu yaz: tür eklemesi olmayan VariableDeclaration düğümlerini bul, satır numarasıyla line N: missing type biçiminde hatayı listeye topla. ts.forEachChild ile gez ve 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 x = 1; / let y: string = "a"; / let z = true;
// SourceFile oluştur
// visit fonksiyonu yaz: Tür eklemesi olmayan VariableDeclaration bul
// Satır numarasıyla line N: missing type biçiminde 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 x = 1;\nlet y: string = "a";\nlet z = true;';
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) {
const { line } = ts.getLineAndCharacterOfPosition(sf, node.getStart(sf));
errors.push(`line ${line + 1}: missing type`);
}
ts.forEachChild(node, visit);
}
visit(sf);
console.log(errors.join("\n"));Beklenen çıktı
line 1: missing type line 3: missing type
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Mini type checker için hangi üçlü bir araya gelir?
- getTypeChecker + writeFile + readFile
- forEachChild + isVariableDeclaration + getLineAndCharacterOfPosition Doğru cevap
- getSourceFile + getText + console.log
- createSourceFile + JSON.stringify + writeFile
Açıklama: forEachChild ile AST gezilir, isVariableDeclaration ile düğüm tanınır, getLineAndCharacterOfPosition ile konum raporlanır. Bu üç birlikte mini checker oluşturur.
2 Düğüm başlangıcı
const start = node.____(sf);
const start = node.getStart(sf);
Açıklama: node.getStart(sf) düğümün başlangıç offsetini döndürür; getOffset, getPos ve getStartPosition diye yöntemler Node üzerinde yoktur.
3 Mini checker özeti
| Kavram | Anlamı |
|---|---|
ts.forEachChild |
AST'yi gezer |
ts.isVariableDeclaration |
Düğüm türünü tanır |
node.getStart |
Başlangıç offsetini verir |
getLineAndCharacterOfPosition |
Satır numarası verir |