আমার একটি পরিবর্তনশীল আছে
abc:number|string;
আমি কীভাবে এটির পরীক্ষা করতে পারি? আমি নীচের মতো কিছু করতে চাই:
if (abc.type === "number") {
// do something
}
আমার একটি পরিবর্তনশীল আছে
abc:number|string;
আমি কীভাবে এটির পরীক্ষা করতে পারি? আমি নীচের মতো কিছু করতে চাই:
if (abc.type === "number") {
// do something
}
উত্তর:
এর জন্য:
abc:number|string;
জাভাস্ক্রিপ্ট অপারেটর ব্যবহার করুন typeof:
if (typeof abc === "number") {
// do something
}
টাইপস্ক্রিপ্ট বোঝে typeof🌹
একে টাইপগার্ড বলা হয়।
ক্লাসের জন্য আপনি instanceofযেমন ব্যবহার করবেন
class Foo {}
class Bar {}
// Later
if (fooOrBar instanceof Foo){
// TypeScript now knows that `fooOrBar` is `Foo`
}
এছাড়া অন্য ধরনের রক্ষীদের হয় যেমন inইত্যাদি https://basarat.gitbooks.io/typescript/content/docs/types/typeGuard.html
যদি আপনি কোনও অবজেক্টের ব্যবহারের উদাহরণ তুলনা করতে চান তবে আমি টাইপগার্ডগুলি কেবল স্ট্রিং বা সংখ্যাগুলিতে কাজ করতে চাই
if(task.id instanceof UUID) {
//foo
}
classএস সহ করে করতে পারেন তবে টাইপস্ক্রিপ্ট interfaceএস বা typeগুলি দিয়ে নয়, কারণ রফতানি করা জাভাস্ক্রিপ্ট ফাইলটিতে সেগুলি নেই।
আমি ভেরিয়েবলটি পরীক্ষা করে দেখেছি যদি এটি বুলিয়ান বা নীচের মতো না হয়
console.log(isBoolean(this.myVariable));
একইভাবে আমাদেরও আছে
isNumber(this.myVariable);
isString(this.myvariable);
ইত্যাদি।
instanceof
utilএই ফাংশনগুলি অ্যাক্সেস করতে আমদানি করতে হবে (উদাহরণস্বরূপimport { isString } from 'util';
অন্যান্য উত্তরগুলি সঠিক, তবে আপনি যখন ইন্টারফেসের সাথে কাজ করছেন আপনি টাইপ বা উদাহরণ ব্যবহার করতে পারবেন না কারণ ইন্টারফেসগুলি জাভাস্ক্রিপ্টে সংকলিত হয় না।
পরিবর্তে আপনি আপনার ভেরিয়েবলটি পরীক্ষা করতে একটি টাইপকাস্ট + ফাংশন চেক টাইপগার্ড ব্যবহার করতে পারেন :
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();
}
}
এবং এটি ES2017-এ সংকলিত জাভাস্ক্রিপ্ট:
function start(vehicle) {
vehicle.drive();
if (vehicle.ringTheBell) {
const bike = vehicle;
bike.ringTheBell();
}
else {
const car = vehicle;
car.honkTheHorn();
}
}
শর্তাধীন বিবৃতি দেওয়ার পরে কোনও ভেরিয়েবলের ধরণ নির্ধারণ করতে আপনি টাইপ গার্ড ব্যবহার করতে পারেন। টাইপস্ক্রিপ্টে একটি প্রকার রক্ষক নিম্নলিখিত:
একটি অভিব্যক্তি যা আপনাকে শর্তাধীন ব্লকের মধ্যে কোনও প্রকারের সংকোচন করতে দেয়।
অন্য কথায় এটি শর্তসাপেক্ষ ব্লকের মধ্যে একটি অভিব্যক্তি, যেখানে টাইপ স্ক্রিপ্ট সংকলকটিতে টাইপ সঙ্কুচিত করার জন্য পর্যাপ্ত তথ্য রয়েছে। টাইপ গার্ডের ব্লকের মধ্যে টাইপটি আরও সুনির্দিষ্ট হবে কারণ সংকলকটি প্রকারটি সম্পর্কে আরও তথ্য নির্ধারণ করেছে।
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')
}
এছাড়া typeofঅপারেটর মত টাইপ রক্ষীদের সেখানে আগে থেকেই রয়েছে instanceof, inএমনকি আপনার নিজের টাইপ প্রহরী ও।
আমার সন্দেহ হয় আপনি নিজের পদ্ধতির সামঞ্জস্য করতে পারেন এবং উদাহরণের পংক্তিতে কিছু ব্যবহার করতে পারেন:
https://www.typescriptlang.org/docs/handbook/advanced-tyype.html#user-defised-type-guards
function isFish(pet: Fish | Bird): pet is Fish {
return (pet as Fish).swim !== undefined;
}
instanceofযদিও এটি জিজ্ঞাসা করা প্রশ্ন ছিল না তবুও নোট যুক্ত করুন ।