এই বিবৃতিগুলির মধ্যে পার্থক্য কী (ইন্টারফেস বনাম টাইপ)?
interface X {
a: number
b: string
}
type X = {
a: number
b: string
};
এই বিবৃতিগুলির মধ্যে পার্থক্য কী (ইন্টারফেস বনাম টাইপ)?
interface X {
a: number
b: string
}
type X = {
a: number
b: string
};
উত্তর:
অনুযায়ী টাইপ করা বিষয় ভাষা নির্দিষ্টকরণ :
একটি ইন্টারফেস ঘোষণার বিপরীতে, যা সর্বদা নামযুক্ত বস্তুর প্রকারের পরিচয় দেয়, একটি প্রকারের উপনাম ঘোষণার মাধ্যমে আদিম, ইউনিয়ন এবং ছেদ করার ধরণগুলি সহ যে কোনও ধরণের জন্য নাম পরিচয় করানো যেতে পারে।
স্পেসিফিকেশন উল্লেখ করা যায়:
ইন্টারফেস প্রকারের অবজেক্ট টাইপের আক্ষরিকের জন্য এলিয়াস টাইপ করার জন্য অনেকগুলি মিল রয়েছে, তবে যেহেতু ইন্টারফেসের ধরণগুলি আরও বেশি ক্ষমতা দেয় সেগুলি সাধারণত এলিয়াস টাইপ করতে পছন্দ করা হয়। উদাহরণস্বরূপ, ইন্টারফেস টাইপ
interface Point { x: number; y: number; }
টাইপ ওরফে হিসাবে লেখা যেতে পারে
type Point = { x: number; y: number; };
যাইহোক, এটি করার অর্থ নিম্নলিখিত ক্ষমতাগুলি হারিয়ে গেছে:
একটি ইন্টারফেসকে প্রসারিত বা প্রয়োগকারী ধারাটিতে নাম দেওয়া যেতে পারে, তবে কোনও অবজেক্ট টাইপের আক্ষরিক জন্য একটি টাইপ ওরফেটিএস 2.7 থেকে আর সত্যহতে পারে না।- একটি ইন্টারফেসের একাধিক একত্রীকরণ ঘোষণাগুলি থাকতে পারে , তবে কোনও অবজেক্ট টাইপের আক্ষরিকরূপে একটি জাতীয় উপকরণ থাকতে পারে না।
interface Point { x: number; } interface Point { y: number; }
extends or implements
আর হয় না। প্রকারটি দ্বারা প্রসারিত এবং প্রয়োগ করা যেতে পারে class
। এখানে একটি উদাহরণ typescriptlang.org/play/...
বর্তমান উত্তর এবং অফিসিয়াল ডকুমেন্টেশনগুলি পুরানো। এবং টাইপস্ক্রিপ্টে নতুন এগুলির জন্য, ব্যবহৃত পরিভাষা উদাহরণ ছাড়াই পরিষ্কার হয় না। নীচে আপ-টু-ডেট পার্থক্যগুলির একটি তালিকা রয়েছে।
উভয়ই কোনও বস্তুর আকার বা কোনও ফাংশনের স্বাক্ষরের বর্ণনা দিতে ব্যবহার করা যেতে পারে। তবে বাক্য গঠন আলাদা হয়।
ইন্টারফেস
interface Point {
x: number;
y: number;
}
interface SetPoint {
(x: number, y: number): void;
}
উপনাম টাইপ করুন
type Point = {
x: number;
y: number;
};
type SetPoint = (x: number, y: number) => void;
কোনও ইন্টারফেসের বিপরীতে, প্রকারভেদটি অন্য প্রকারের যেমন আদিম, ইউনিয়ন এবং টিপলসের জন্যও ব্যবহার করা যেতে পারে।
// primitive
type Name = string;
// object
type PartialPointX = { x: number; };
type PartialPointY = { y: number; };
// union
type PartialPoint = PartialPointX | PartialPointY;
// tuple
type Data = [number, string];
উভয় প্রসারিত করা যেতে পারে, কিন্তু আবার বাক্য গঠন আলাদা হয়। অতিরিক্তভাবে, নোট করুন যে একটি ইন্টারফেস এবং টাইপ উপন্যাস পারস্পরিক একচেটিয়া নয়। একটি ইন্টারফেস একটি প্রকারের উপন্যাস এবং বিপরীতভাবে প্রসারিত করতে পারে।
ইন্টারফেস ইন্টারফেস প্রসারিত
interface PartialPointX { x: number; }
interface Point extends PartialPointX { y: number; }
প্রকারের উপন্যাস প্রকারভেদ প্রসারিত করে
type PartialPointX = { x: number; };
type Point = PartialPointX & { y: number; };
ইন্টারফেস প্রকারের উপন্যাস প্রসারিত করে
type PartialPointX = { x: number; };
interface Point extends PartialPointX { y: number; }
প্রকারের উপন্যাস ইন্টারফেস প্রসারিত করে
interface PartialPointX { x: number; }
type Point = PartialPointX & { y: number; };
একটি শ্রেণি একটি ইন্টারফেস প্রয়োগ করতে পারে বা উভয়কে একই সঠিক উপায়ে টাইপ করতে পারে। তবে নোট করুন যে কোনও শ্রেণি এবং ইন্টারফেস স্ট্যাটিক ব্লুপ্রিন্ট হিসাবে বিবেচিত হয়। অতএব, তারা কোনও ইউনিয়নের প্রকারের নাম দেয় এমন কোনও প্রকারের উপন্যাস প্রয়োগ করতে / প্রসারিত করতে পারে না।
interface Point {
x: number;
y: number;
}
class SomePoint implements Point {
x = 1;
y = 2;
}
type Point2 = {
x: number;
y: number;
};
class SomePoint2 implements Point2 {
x = 1;
y = 2;
}
type PartialPoint = { x: number; } | { y: number; };
// FIXME: can not implement a union type
class SomePartialPoint implements PartialPoint {
x = 1;
y = 2;
}
কোনও প্রকারের উপন্যাসের বিপরীতে, একটি ইন্টারফেস একাধিকবার সংজ্ঞায়িত করা যায় এবং এটি একটি একক ইন্টারফেস হিসাবে বিবেচিত হবে (সমস্ত ঘোষণার সদস্যদের একত্রীকরণের সাথে)।
// These two declarations become:
// interface Point { x: number; y: number; }
interface Point { x: number; }
interface Point { y: number; }
const point: Point = { x: 1, y: 2 };
type
বা interface
? আমি কখনই এক বা অন্যটি ব্যবহার করব সে সম্পর্কে আমি এখনও বিভ্রান্ত।
type
নির্দিষ্ট সীমাবদ্ধতাগুলি ব্যবহার করে পুনরাবৃত্ত প্রকারগুলি সংজ্ঞায়িত করতে পারেন (এবং টাইপস্ক্রিপ্ট ৩.7 হিসাবে এই সীমাবদ্ধতাগুলি খুব বেশি চলে গেছে)। ইন্টারফেস প্রকার প্রসারিত করতে পারে। শ্রেণিগুলি প্রকারগুলি বাস্তবায়ন করতে পারে। তদ্ব্যতীত, কোনও টেবিলের স্ক্রিনশট হিসাবে ডেটা উপস্থাপিত করা প্রতিবন্ধী দৃষ্টিশক্তির জন্য একেবারেই অ্যাক্সেসযোগ্য করে তোলে।
https://www.typescriptlang.org/docs/handbook/advanced-types.html
একটি পার্থক্য হ'ল ইন্টারফেসগুলি একটি নতুন নাম তৈরি করে যা সর্বত্র ব্যবহৃত হয়। প্রকারের উপনাম একটি নতুন নাম তৈরি করে না - উদাহরণস্বরূপ, ত্রুটি বার্তাগুলি উপনামের নামটি ব্যবহার করবে না।
// কোনও বস্তুর জন্য একটি গাছের কাঠামো তৈরি করুন। ছেদ না হওয়ার কারণে (এবং) ইন্টারফেসের সাথে আপনি একই কাজ করতে পারবেন না
type Tree<T> = T & { parent: Tree<T> };
// কেবল কয়েকটি মান নির্ধারণের জন্য একটি পরিবর্তনশীলকে সীমাবদ্ধ করতে টাইপ করুন। ইন্টারফেসের ইউনিয়ন নেই (|)
type Choise = "A" | "B" | "C";
// প্রকারের জন্য ধন্যবাদ, আপনি শর্তাধীন ব্যবস্থার জন্য অমলযোগ্য প্রকারের ধন্যবাদ জানাতে পারেন।
type NonNullable<T> = T extends null | undefined ? never : T;
// আপনি ওওপির জন্য ইন্টারফেস ব্যবহার করতে পারেন এবং অবজেক্ট / শ্রেণির কঙ্কাল সংজ্ঞায়িত করতে 'সরঞ্জামগুলি' ব্যবহার করতে পারেন
interface IUser {
user: string;
password: string;
login: (user: string, password: string) => boolean;
}
class User implements IUser {
user = "user1"
password = "password1"
login(user: string, password: string) {
return (user == user && password == password)
}
}
// আপনি অন্যান্য ইন্টারফেসের সাথে ইন্টারফেস প্রসারিত করতে পারেন
interface IMyObject {
label: string,
}
interface IMyObjectWithSize extends IMyObject{
size?: number
}
ইতিমধ্যে সরবরাহ করা উজ্জ্বল উত্তরগুলির পাশাপাশি, ইন্টারফেস বনাম প্রকার প্রসারিত করার ক্ষেত্রে এখানে লক্ষণীয় পার্থক্য রয়েছে । আমি সম্প্রতি এমন বেশ কয়েকটি কেস নিয়েছি যেখানে একটি ইন্টারফেস কাজটি করতে পারে না:
ডকুমেন্টেশন ব্যাখ্যা করেছে
- একটি পার্থক্য হ'ল ইন্টারফেসগুলি একটি নতুন নাম তৈরি করে যা সর্বত্র ব্যবহৃত হয়। টাইপ অ্যালিয়াস একটি নতুন নাম তৈরি করে না - উদাহরণস্বরূপ, ত্রুটি বার্তাগুলি টাইপস্ক্রিপ্টের পুরানো সংস্করণ নাম নেম। সংস্করণ ২.7 অনুসারে, নতুন চৌরাস্তা প্রকার তৈরি করে প্রকারের উপকরণগুলি বাড়ানো যেতে পারে
- অন্যদিকে, আপনি যদি কোনও ইন্টারফেস দিয়ে কিছু আকৃতি প্রকাশ করতে না পারেন এবং আপনাকে ইউনিয়ন বা টুপল টাইপ ব্যবহার করা দরকার, টাইপ এলিয়াসগুলি সাধারণত যাওয়ার উপায়।