Bir değişkenim var.
abc:number|string;
Türünü nasıl kontrol edebilirim? Aşağıdaki gibi bir şey yapmak istiyorum:
if (abc.type === "number") {
// do something
}
Bir değişkenim var.
abc:number|string;
Türünü nasıl kontrol edebilirim? Aşağıdaki gibi bir şey yapmak istiyorum:
if (abc.type === "number") {
// do something
}
Yanıtlar:
İçin :
abc:number|string;
JavaScript operatörünü kullanın typeof:
if (typeof abc === "number") {
// do something
}
Typescript anlar typeof🌹
Buna daktilo denir.
Sınıflar için instanceoförn.
class Foo {}
class Bar {}
// Later
if (fooOrBar instanceof Foo){
// TypeScript now knows that `fooOrBar` is `Foo`
}
Diğer tip korumalar da vardır mesela invb https://basarat.gitbooks.io/typescript/content/docs/types/typeGuard.html
Bir nesne kullanımı örneğini karşılaştırmak istiyorsanız, TypeGuard'ların yalnızca dizeler veya sayılar üzerinde çalıştığını eklemek isterim.
if(task.id instanceof UUID) {
//foo
}
classtypescript ile es ancak interfacelar ya typeda ihraç JavaScript dosyasında var olmadığın, s.
Bir değişkenin boole olup olmadığını aşağıdaki gibi kontrol ettim
console.log(isBoolean(this.myVariable));
Benzer şekilde bizde
isNumber(this.myVariable);
isString(this.myvariable);
ve bunun gibi.
instanceof
utilBu işlevlere erişmek için import { isString } from 'util';
Diğer cevaplar doğrudur, ancak arayüzlerle uğraşırken typeof veya instanceof kullanamazsınız çünkü arayüzler javascript'e derlenmez.
Bunun yerine , değişkeninizi kontrol etmek için bir typecast + işlev kontrolü yazım kılavuzu kullanabilirsiniz:
interface Car {
drive(): void;
honkTheHorn(): void;
}
interface Bike {
drive(): void;
ringTheBell(): void;
}
function start(vehicle: Bike | Car ) {
vehicle.drive();
// typecast and check if the function exists
if ((<Bike>vehicle).ringTheBell) {
const bike = (<Bike>vehicle);
bike.ringTheBell();
} else {
const car = (<Car>vehicle);
car.honkTheHorn();
}
}
Ve ES2017'de derlenmiş JavaScript:
function start(vehicle) {
vehicle.drive();
if (vehicle.ringTheBell) {
const bike = vehicle;
bike.ringTheBell();
}
else {
const car = vehicle;
car.honkTheHorn();
}
}
Koşullu bir ifadeden sonra bir değişkenin türünü belirlemek için tür korumalarını kullanabilirsiniz. Daktilo yazısında bir tür koruması aşağıdaki gibidir:
Koşullu bir blok içindeki bir şeyin türünü daraltmanıza izin veren bir ifade.
Başka bir deyişle, typcript derleyicisinin türü daraltmak için yeterli bilgiye sahip olduğu koşullu bir blok içindeki bir ifadedir. Tür, tür koruma bloğu içinde daha spesifik olacaktır çünkü derleyici, tür hakkında daha fazla bilgi çıkarmıştır.
declare let abc: number | string;
// typeof abc === 'string' is a type guard
if (typeof abc === 'string') {
// abc: string
console.log('abc is a string here')
} else {
// abc: number, only option because the previous type guard removed the option of string
console.log('abc is a number here')
}
Ayrıca typeofoperatör orada gibi tip korumaları inşa edilir instanceof, inve hatta kendi tip korumalar.
instanceofSorulan soru bu olmasa da üzerine not eklendi .