টাইপস্ক্রিপ্টে, টাইপ এবং ইন্টারফেসের মধ্যে পার্থক্য কী?


114

নিম্নলিখিতগুলির মধ্যে পার্থক্যগুলি কী কী?

type Foo = { 
    foo: string 
};
interface Foo {
   foo: string;
}

3
ইন্টারফেস এক্সটেনশনের মতো প্রকারটি বাড়ানো যায় না। প্রকারভেদ কেবল একটি প্রকারের জন্য উপস্বাস্তব্য।
পিএসএল

4
গাইডেন্সটি এখানে উপলভ্য: বাসরত.টাইটবুকস.আইও
টাইপসক্রিপ্ট

2
আমি বেশিরভাগ বাহ্যিক ডেটার জন্য টাইপ ব্যবহার করি, উদাহরণস্বরূপ কোনও জেএসওএন ফাইল থেকে, বা যদি আপনি কেবল ওওপি ক্লাস ব্যবহার না করেই ফাংশন লিখছেন।
কোকোডোকো

1
আমি এই নিবন্ধটি দরকারী খুঁজে পেয়েছি যা পার্থক্যগুলি ব্যাখ্যা করে - মাঝারি.com
সন্দীপ জিবি

1
গৃহীত উত্তরটি পুরানো। : Updated ব্যাখ্যা এখানে পোস্ট (যেহেতু যে থ্রেড Google দ্বারা বিশেষ সুবিধাপ্রাপ্ত হবে বলে মনে হয়) stackoverflow.com/questions/37233735/...
jabacchetta

উত্তর:


125

ইন্টারফেসগুলি বাড়ানো যেতে পারে

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;

সুতরাং সাধারণভাবে যদি আপনার প্রশ্নটিতে প্রদর্শিত একটি সাধারণ প্লেইন অবজেক্ট টাইপ থাকে তবে একটি ইন্টারফেস সাধারণত একটি ভাল পদ্ধতির হয়। আপনি যদি নিজেকে এমন কিছু লিখতে চান যা ইন্টারফেস হিসাবে লেখা যায় না, বা কেবল কিছু আলাদা নাম দিতে চান, তবে একটি টাইপ উলাম ভাল।


3
Type aliases, however, can represent some things interfaces can'tএটা আমার কাছে আপনার উদাহরণ বলে মনে হয় NeatAndCoolএবং JustSomeOtherNameইন্টারফেস সেই বিদ্যমান প্রসারিত হিসাবে তৈরি করা যেতে পারে Neat, Coolবা SomeTypeধরনের।
রুডি

প্রকৃতপক্ষে দ্বিতীয় এবং তৃতীয় উদাহরণগুলি একটি ইন্টারফেস দিয়ে তৈরি করা যেতে পারে:interface NeatAndCool extends Neat, Cool {} interface JustSomeOtherName extends SomeType {}
পিটারজওয়েস্ট

3
দুটি ইন্টারফেস প্রসারিত করা সবসময় একই ছেদ ছেলের ধরণের ফলাফল হিসাবে তৈরি করে না এবং সমস্ত প্রকারের প্রসারিত করা যায় না (যেখানে সমস্ত প্রকারকে আলাদা করা যায় বা ইউনিয়ন / ছেদ করা যায়)
রায়ান ক্যাভনফ

1
সুতরাং টাইপ সুবিধা কি? আমরা যখন বলতে পারি আমাদের ইন্টারফেস রয়েছে তখন টাইপটি কার্যকর হয় না?
মোস্তফা সাদাতনিয়া

4

এছাড়াও, একটি ইন্টারফেস প্রয়োগ করা যেতে পারে ।


1
এবং একটি অবজেক্ট একাধিক ইন্টারফেস বাস্তবায়ন করতে পারেclass Thing implements Neat, Cool
কোকোডোকো

1
তোমার মানে কি?
প্রকারটি

3
এটি ইমো নয় একটি মন্তব্য হওয়া উচিত।
মাইকেল কুনস্ট

প্রিয় ডেভ, আপনার একটি উত্তর দেওয়া উচিত নয় একটি মন্তব্য করা উচিত। এছাড়াও এই উত্তরটির উপর ভিত্তি করে আপনার উত্তরটি ঠিক সঠিক নয়।
মেহরদ্দ্ব্ব্যাশ

4

প্রকারভেদ ইন্টারফেসের মতো ধরণের এবং তদ্বিপরীত: উভয়ই বর্গ দ্বারা প্রয়োগ করা যেতে পারে। তবে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে: ১. যখন শ্রেণি দ্বারা প্রকারটি প্রয়োগ করা হয়, তখন প্রকারের সাথে সম্পর্কিত বৈশিষ্ট্যগুলি অবশ্যই শ্রেণীর ভিতরে শুরু করতে হবে, তবে ইন্টারফেসের সাথে সেগুলি অবশ্যই ঘোষণা করতে হবে। ২.আরিয়ান যেমন উল্লেখ করেছেন: ইন্টারফেস আরেকটি ইন্টারফেস প্রসারিত করতে পারে। প্রকারগুলি পারে না।

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'
}

4

এগুলির মধ্যে পার্থক্যগুলি ইতিমধ্যে এই থ্রেডে রয়েছে।

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' };

কিন্তু typeinterfaceখুব ভিন্ন প্রেক্ষাপটে ব্যবহার করা হয়।

let foo: Foo;
let today: Date = new Date();

এখানে typeএর fooহয় Fooএবং todayহয় Date। এটি একটি ভেরিয়েবল ডিক্লেরেশনের মতো যা অন্যান্য ভেরিয়েবলের টাইপ সম্পর্কিত তথ্য ধারণ করে। typeইন্টারফেস, শ্রেণি, ফাংশন স্বাক্ষর, অন্যান্য ধরণের বা এমনকি মানগুলির (যেমন type mood = 'Good' | 'Bad') সুপারসেটের মতো । শেষে typeএকটি ভেরিয়েবলের সম্ভাব্য কাঠামো বা মান বর্ণনা করে।


4

"ইন্টারফেস প্রয়োগ করা যেতে পারে" বলা ভুল, কারণ প্রকারগুলিও প্রয়োগ করা যেতে পারে

type A = { a: string };


class Test implements A {

    a: string;
}

যদিও আপনি এটি করতে পারেন, আপনি এমন কোনও ইউনিয়ন জাতীয় প্রকার প্রয়োগ করতে পারবেন না, যা সততার সাথে সম্পূর্ণ বোঝায় :)


4

টাইপস্ক্রিপ্ট টাইপ ইতিমধ্যে বিদ্যমান ধরণের রেফারেন্স ব্যবহার করা হয় । এর মতো বাড়ানো যায় না 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
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.