Daha fazla bilgi için kullanıcı tanımlı tip koruma fonksiyonları referansına bakın .
function isString(test: any): test is string{
return typeof test === "string";
}
function example(foo: any){
if(isString(foo)){
console.log("it is a string" + foo);
console.log(foo.length);
}
}
example("hello world");
Tip yüklemi kullanma test is string(yerine sadece kullanmanın yukarıdaki formatta booleandönüş türü için), sonra isString()işlevin döndüreceği, denir true, typescript türünü daralır stringişlevi çağrılmış tarafından korunan herhangi bloğunda.
Derleyici düşünürler fooise stringaşağıda korunan bloğunda (ve SADECE korunan aşağıda bloğunda)
{
console.log("it is a string" + foo);
console.log(foo.length);
}
Bir tür koşulu yalnızca derleme zamanında kullanılır. Ortaya çıkan .jsdosyanın (çalışma zamanı) TÜR'ü dikkate almadığı için hiçbir farkı olmayacaktır.
Farklılıkları aşağıdaki dört örnekte göstereceğim.
Örnek 1: Yukarıdaki örnek kodda bir derleme hatası veya çalışma zamanı hatası olmayacaktır.
Örnek 2: Aşağıdaki örnek kodda, TypeScript türü daralttığı stringve yönteme toExponentialait olmadığını kontrol ettiği için bir derleme hatası (ayrıca bir çalışma zamanı hatası) olacaktır string.
function example(foo: any){
if(isString(foo)){
console.log("it is a string" + foo);
console.log(foo.length);
console.log(foo.toExponential(2));
}
}
Örnek 3: aşağıdaki örnek kodda bir derleme hatası yoktur, ancak bir çalışma zamanı hatası verecektir çünkü TypeScript, türü YALNIZCA bloke olacak şekilde daraltacaktır, stringancak sonra daraltmayacaktır , bu nedenle foo.toExponentialderleme hatası oluşturmayacaktır (TypeScript bunun bir stringtür olduğunu düşünmez ). Bununla birlikte, çalışma zamanında, yönteme stringsahip değildir toExponential, bu nedenle çalışma zamanı hatası verecektir.
function example(foo: any){
if(isString(foo)){
console.log("it is a string" + foo);
console.log(foo.length);
}
console.log(foo.toExponential(2));
}
Örnek 4: test is string(type yüklemi) kullanmazsak , TypeScript korunan bloktaki türü daraltmaz ve aşağıdaki örnek kodda derleme hatası olmaz, ancak çalışma zamanı hatası verir.
function isString(test: any): boolean{
return typeof test === "string";
}
function example(foo: any){
if(isString(foo)){
console.log("it is a string" + foo);
console.log(foo.length);
console.log(foo.toExponential(2));
}
}
Sonuç olarak test is string(tür yüklemi), geliştiricilere kodun bir çalışma zamanı hatası alma şansı olacağını söylemek için derleme zamanında kullanılır. Javascript için, geliştiriciler derleme zamanında hatayı BİLMEYECEKLER. Bu, TypeScript kullanmanın avantajıdır.
booleandeğil mi?