নিম্নলিখিতগুলির মধ্যে পার্থক্যগুলি কী কী?
type Foo = {
foo: string
};
interface Foo {
foo: string;
}
নিম্নলিখিতগুলির মধ্যে পার্থক্যগুলি কী কী?
type Foo = {
foo: string
};
interface Foo {
foo: string;
}
উত্তর:
ইন্টারফেসগুলি বাড়ানো যেতে পারে
interface A {
x: number;
}
interface B extends A {
y: string;
}
এবং বৃদ্ধি
interface C {
m: boolean;
}
// ... later ...
interface C {
n: number;
}
টাইপ অ্যালিয়াসস, এমন কিছু উপস্থাপন করতে পারে যা ইন্টারফেসগুলি পারে না
type NumOrStr = number | string;
type NeatAndCool = Neat & Cool;
type JustSomeOtherName = SomeType;
সুতরাং সাধারণভাবে যদি আপনার প্রশ্নটিতে প্রদর্শিত একটি সাধারণ প্লেইন অবজেক্ট টাইপ থাকে তবে একটি ইন্টারফেস সাধারণত একটি ভাল পদ্ধতির হয়। আপনি যদি নিজেকে এমন কিছু লিখতে চান যা ইন্টারফেস হিসাবে লেখা যায় না, বা কেবল কিছু আলাদা নাম দিতে চান, তবে একটি টাইপ উলাম ভাল।
Type aliases, however, can represent some things interfaces can'tএটা আমার কাছে আপনার উদাহরণ বলে মনে হয় NeatAndCoolএবং JustSomeOtherNameইন্টারফেস সেই বিদ্যমান প্রসারিত হিসাবে তৈরি করা যেতে পারে Neat, Coolবা SomeTypeধরনের।
interface NeatAndCool extends Neat, Cool {} interface JustSomeOtherName extends SomeType {}
এছাড়াও, একটি ইন্টারফেস প্রয়োগ করা যেতে পারে ।
class Thing implements Neat, Cool
প্রকারভেদ ইন্টারফেসের মতো ধরণের এবং তদ্বিপরীত: উভয়ই বর্গ দ্বারা প্রয়োগ করা যেতে পারে। তবে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে: ১. যখন শ্রেণি দ্বারা প্রকারটি প্রয়োগ করা হয়, তখন প্রকারের সাথে সম্পর্কিত বৈশিষ্ট্যগুলি অবশ্যই শ্রেণীর ভিতরে শুরু করতে হবে, তবে ইন্টারফেসের সাথে সেগুলি অবশ্যই ঘোষণা করতে হবে। ২.আরিয়ান যেমন উল্লেখ করেছেন: ইন্টারফেস আরেকটি ইন্টারফেস প্রসারিত করতে পারে। প্রকারগুলি পারে না।
type Person = {
name:string;
age:number;
}
// must initialize all props - unlike interface
class Manager implements Person {
name: string = 'John';
age: number = 55;
// can add props and methods
size:string = 'm';
}
const jane : Person = {
name :'Jane',
age:46,
// cannot add more proprs or methods
//size:'s'
}
এগুলির মধ্যে পার্থক্যগুলি ইতিমধ্যে এই থ্রেডে রয়েছে।
type Foo = {
foo: string
};
interface Foo {
foo: string;
}
এখানে type Fooএবং interface Fooপ্রায় অনুরূপ দেখতে এটি বিভ্রান্তিকর।
interfaceনিম্নোক্ত বৈশিষ্ট্যগুলি (এখানে foo:string) কোনও বস্তুর মধ্যে থাকা উচিত বলে চুক্তি ।
interfaceনা class। যখন ভাষা একাধিক উত্তরাধিকার সমর্থন করে না তখন এটি ব্যবহৃত হয়। সুতরাং interfaceবিভিন্ন শ্রেণীর মধ্যে একটি সাধারণ কাঠামো হতে পারে।
class Bar implements Foo {
foo: string;
}
let p: Foo = { foo: 'a string' };
কিন্তু typeও interfaceখুব ভিন্ন প্রেক্ষাপটে ব্যবহার করা হয়।
let foo: Foo;
let today: Date = new Date();
এখানে typeএর fooহয় Fooএবং todayহয় Date। এটি একটি ভেরিয়েবল ডিক্লেরেশনের মতো যা অন্যান্য ভেরিয়েবলের টাইপ সম্পর্কিত তথ্য ধারণ করে।
typeইন্টারফেস, শ্রেণি, ফাংশন স্বাক্ষর, অন্যান্য ধরণের বা এমনকি মানগুলির (যেমন type mood = 'Good' | 'Bad') সুপারসেটের মতো । শেষে typeএকটি ভেরিয়েবলের সম্ভাব্য কাঠামো বা মান বর্ণনা করে।
টাইপস্ক্রিপ্ট টাইপ ইতিমধ্যে বিদ্যমান ধরণের রেফারেন্স ব্যবহার করা হয় । এর মতো বাড়ানো যায় না interface। এর উদাহরণগুলি type:
type Money = number;
type FormElem = React.FormEvent<HTMLFormElement>;
type Person = [string, number, number];
আপনি বিশ্রাম এবং স্প্রেড প্রকারে ব্যবহার করতে পারেন:
type Scores = [string, ...number[]];
let ganeshScore = ["Ganesh", 10, 20, 30]
let binodScore = ["Binod", 10, 20, 30, 40]
অন্যদিকে ইন্টারফেস আপনাকে একটি নতুন টাইপ তৈরি করতে দেয়।
interface Person{
name: string,
age: number,
}
Interface can be extended with extends keyword.
interface Todo{
text: string;
complete: boolean;
}
type Tags = [string, string, string]
interface TaggedTodo extends Todo{
tags: Tags
}