Statik analiz, verilerinizin otomatik olarak kontrol edilmesini sağlayan bir test türüdür. veya otomatik test yazmak zorunda kalmadan tek bir kod yazın. Başardınız VSCode gibi bir IDE kullanıyorsanız, bu tür bir testle karşılaşmış olabilirsiniz. TypeScript tarafından gerçekleştirilen kontrol bir tür statik analizdir ve ve uyarıların altındaki kıvrımlı çizgilere dönüştürülür.
ESLint
ESLint, kurumunuzdaki olası sorunlar hakkında geri bildirim verebilecek kullanabilirsiniz. Bu sorunlar güvenli olabilir,ancak hatalar veya standart olmayan davranışlar olabilir yaşayabilirsiniz. ESLint, kontrol edilmiş çok sayıda kuralı uygulamanıza kod tabanınıza da ("önerilir" bölümündeki birçok ayarlandı.
ESLint kuralına iyi bir örnek olarak
no-unsafe-finally
kuralı. Bu, programınızın özelliklerini değiştiren ifadeler yazmanıza
finally
bloğundaki akışı kontrol edebilir. Bu harika bir kuraldır çünkü bunu yaptığınızda
takip edilmesi zor olabilen JavaScript yazmanın alışılmadık bir yoludur. Ancak,
aynı zamanda sağlıklı bir kod inceleme sürecinin algılayabilmesi gereken bir unsurdur.
try {
const result = await complexFetchFromNetwork();
if (!result.ok) {
throw new Error("failed to fetch");
}
} finally {
// warning - this will 'overrule' the previous exception!
return false;
}
Bu nedenle ESLint, sağlıklı bir inceleme sürecinin (ve kılavuzudur, çünkü bu kod tabanınızın nasıl görünmesi gerektiğini tanımlayan bir kılavuzdur.) bir geliştiricinin uygulamaya çalışabileceği her türlü standart dışı yaklaşımı yakalamak için kod tabanınıza gönderebilirsiniz. Google'ın Mühendislik Uygulamaları kılavuzunda "işleri basit tutma" ile ilgili kısa bir bölüm bulunur.
ESLint, bir kuralı çiğnemenize ve koda "izin verildi" olarak ek açıklama eklemenize olanak tanır. Örneğin, aşağıdaki gibi not ekleyerek önceki mantığa izin verebilir:
finally {
// eslint-disable-next-line no-unsafe-finally
return false;
}
Bir kuralı sürekli olarak ihlal ediyorsanız onu devre dışı bırakmayı düşünebilirsiniz. Bu araçlar sizi belirli bir şekilde kod yazmanızı teşvik eder, ancak ekibiniz farklı bir şekilde kod yazmaya başlayın ve bunu yapmanın risklerinin farkında olun. bahsedeceğiz.
Son olarak, statik analiz araçlarını büyük bir kod tabanında etkinleştirmek, işe yarayan kodlar üzerinde yardımcı olmayan gürültü (ve yeniden düzenleme için yapılan yorucu çalışmalar) tamamdır. Bu nedenle proje yaşam döngüsünün erken aşamalarında etkinleştirme yapmak daha kolaydır.
Tarayıcı desteği için ESLint eklentileri
ESLint'e, geniş çapta yaygın olmayan API'lerin kullanımını işaretleyen bir eklenti ekleyebilirsiniz. hedef tarayıcı listeniz tarafından desteklenen veya desteklenmeyen bir web sitesini ziyaret edin. İlgili içeriği oluşturmak için kullanılan eslint-eklentisi-uyumlu paketinin kullanıcılarınıza API sunulmayabileceği durumlarda sizi uyarabilir. Bu nedenle, ve takip etmeniz gerekmez.
Statik analiz için tür kontrolü
JavaScript'i öğrenirken, yeni geliştiriciler genellikle yavaş şekilde yazılmış bir dil olduğundan emin olun. Yani, doğrudan bir değişkenini bir tür olarak kullanmak istiyorsanız, bir öğe için aynı konumu yardımcı olur. Bu, Python ve diğer kodlama dillerine benzer ancak C/C++ ve Rust gibi derlenen dillerdir.
Bu tür bir dil başlamak için iyi olabilir ve muhtemelen bu,
JavaScript'i bu kadar popüler yapan basitlik ama genellikle bir hata
veya en azından kafa karıştırıcı hatalara imkan veren bir yapılandırma
olur. Örneğin, string
veya nesne türünün olduğu bir number
ileterek
yanlış yazılan değer, birçok farklı veri kaynağına uygulanabilecek
kitaplıklarını düzelterek karmaşaya neden olan bir TypeError
sağlayın.
TypeScript
TypeScript, JavaScript'in yazma eksikliğine yönelik en yaygın çözümdür ekleyebilirsiniz. Bu kursta kapsamlı olarak kullanılmaktadır. Bu bir kurs almasanız da size sağladığımız için çok önemli olduğu için TypeScript, statik analize dayanır.
Örnek vermek gerekirse, bu kod,
string
ad ve number
yaş:
const callback = (name: string, age: string): void => {
console.info(name, 'is now', age, 'years old!');
};
onBirthday(callback);
TypeScript ile çalıştırıldığında veya fareyle üzerine gelindiğinde aşağıdaki hatayı oluşturur devreye girer:
bad.ts:4:12 - error TS2345: Argument of type '(name: string, age: string) => void' is not assignable to parameter of type '(name: string, age: number) => void'.
Types of parameters 'age' and 'age' are incompatible.
Type 'number' is not assignable to type 'string'.
4 onBirthday(callback);
~~~~~~~~
Found 1 error in bad.ts:4
Sonuç olarak TypeScript kullanmanın amacı bunun gibi hataları önlemektir:
yaşınızın string
değil, number
olması gerekir. Bu
gibi testler, diğer test türlerini kullanarak tespit etmek zor olabilir.
Ayrıca tür sistemi, daha test yazılmadan önce geri bildirimde bulunabilir.
Bu, size erken geri bildirim sağlayarak kod yazma sürecini kolaylaştırabilir
kod yazmak yerine yazılım geliştirirken
yürütülmesidir.
TypeScript kullanmanın en zor kısmı, onu doğru şekilde ayarlamaktır. Hepsini
proje, birincil olarak tsc
tarafından kullanılan bir tsconfig.json
dosyasına ihtiyaç duyuyor
VSCode gibi IDE'ler ve diğer birçok IDE'ler tarafından da
geliştirme araçları ve araçları geliştirebilirsiniz. Bu dosyada yüzlerce
seçenekleri ve işaretleri bulabilirsiniz. Bu özelliği ayarlamak için yararlanabileceğiniz bazı kaynakları şurada bulabilirsiniz:
Genel TypeScript ipuçları
TypeScript'i ayarlarken ve bir tsconfig.json
dosyası aracılığıyla kullanırken
şunları göz önünde bulundurun:
- Kaynak dosyalarınızın gerçekten dahil edildiğinden ve kontrol edildiğinden emin olun. Dosya bunun nedeni muhtemelen dosyanın kontrol edilmemesidir.
- Bunun yerine,
.d.ts
dosyalarındaki türleri ve arayüzleri açık bir şekilde açıklamak siz fonksiyon yazarken bunların dolaylı olarak açıklanması, kod tabanını test etmek daha kolaydır. Alıştırma ve "sahte" yazmak daha kolaydır sürümleri kodunu girmeniz gerekir. .
TypeScript örtülü herhangi bir
TypeScript'in en güçlü ve değerli yapılandırma seçeneklerinden biri
noImplicitAny
işareti. Ancak bunu etkinleştirmek genellikle en zor olanıdır.
Özellikle de büyük bir kod tabanınız varsa. (noImplicitAny
işareti
strict
modundaysanız varsayılan olarak etkindir.)
Bu işaret, işlevin hata döndürmesini sağlar:
export function fibonacci(n) {
if (n <= 1) {
return 0;
} else if (n === 2) {
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
Yine de, okuyucu olarak n
değerinin bir sayı olması gerektiği açıktır.
TypeScript bunu kesin olarak onaylayamaz. VSCode kullanıyorsanız fareyle üzerine gelin
işlev bu değeri şu şekilde açıklar:
function fibonacci(n: any): any
Bu işlevin çağıranları, any
türünde bir değer geçirebilir
(başka türlere izin veren bir tür), yalnızca number
değil.
noImplicitAny
işaretini görüyorsanız geliştirme sırasında bu tür kodları koruyabilirsiniz.
kod iletme işlemleriniz için kapsamlı iş mantığı testleri yazmanıza gerek kalmadan
yanlış veri türlerini ölçebilir.
Buradaki basit çözüm hem n
bağımsız değişkenini hem de fibonacci
dönüş türünü number
olarak işaretlemektir.
noImplicitAny
işareti, any
kodunu açıkça yazmanıza engel olmaz
kod tabanınız içindir. Yine de alan adını kabul eden veya döndüren bir işlev yazabilirsiniz
any
türü. Yalnızca her değişkene bir tür vermenizi sağlar.