টাইপস্ক্রিপ্টে প্রকার প্রসারিত করা সম্ভব?


155

বলুন আমার কাছে নিম্নলিখিত ধরণের রয়েছে:

type Event = {
   name: string;
   dateCreated: string;
   type: string;
}

আমি এখন এই প্রকারটি প্রসারিত করতে চাই, অর্থাৎ

type UserEvent extends Event = {
   UserId: string; 
}

এটি কাজ করে না। কিভাবে আমি এটি করতে পারব?


3
typeশব্দ নির্ধারণ করতে ব্যবহৃত হয় টাইপ alias লেখা , না ইন্টারফেসগুলি বা ক্লাস।
হেরেটিক বানর 18

উত্তর:


283

কীওয়ার্ডটি কেবল extendsইন্টারফেস এবং ক্লাসের জন্য ব্যবহার করা যেতে পারে।

আপনি যদি কেবলমাত্র এমন কোনও প্রকারের অতিরিক্ত বৈশিষ্ট্যযুক্ত ঘোষনা করতে চান তবে আপনি ছেদ প্রকারটি ব্যবহার করতে পারেন :

type UserEvent = Event & {UserId: string}

টাইপস্ক্রিপ্ট ২.২ এর জন্য আপডেট করুন , এখন এমন ইন্টারফেস পাওয়া সম্ভব যা অবজেক্টের মতো ধরণের প্রসারিত করে , যদি প্রকারটি কিছু বিধিনিষেধকে সন্তুষ্ট করে:

type Event = {
   name: string;
   dateCreated: string;
   type: string;
}

interface UserEvent extends Event {
   UserId: string; 
}

এটি অন্যভাবে কাজ করে না - আপনাকে সিন্ট্যাক্স ব্যবহার করতে চাইলে UserEventঅবশ্যই ইন্টারফেস হিসাবে ঘোষণা করতে হবে ।typeextends

এবং এটি extend নির্বিচারে ধরণের সাথে ব্যবহার করা এখনও অসম্ভব - উদাহরণস্বরূপ, Eventকোনও সীমাবদ্ধতা ছাড়াই টাইপ প্যারামিটার হলে এটি কাজ করে না ।


আমি টিএস v3.5.2 ব্যবহার করছি, এবং আমি কোনও ইন্টারফেস কোনও ধরণের প্রসারিত করতে সক্ষম নই। interface A<T> extends B<T> {blar}একটি ইন্টারফেস কেবল স্থায়ীভাবে পরিচিত সদস্যদের সাথে অবজেক্টের ধরণের বা বস্তুর প্রকারের ছেদ বাড়িয়ে দিতে পারে
WORMSS

@ ওয়ার্মএসএস interface Identifiable<T> extends T { id: string }এটি করে আমাকে ত্রুটি দেয় "একটি ইন্টারফেস কেবল স্থায়ীভাবে পরিচিত সদস্যদের সাথে কোনও অবজেক্টের ধরণের বা ছেদকে প্রসারিত করতে পারে" (2312) "
মানিনাক

22

আপনি প্রকারের ছেদ করতে পারেন:

type TypeA = {
    nameA: string;
};
type TypeB = {
    nameB: string;
};
export type TypeC = TypeA & TypeB;

আপনার কোডের কোথাও এখন আপনি এটি করতে পারেন:

const some: TypeC = {
    nameB: 'B',
    nameA: 'A',
};

6

আপনি যা অর্জন করতে চাইছেন তার সমতুল্য

interface Event {
   name: string;
   dateCreated: string;
   type: string;
}

interface UserEvent extends Event {
   UserId: string; 
}

আপনি যেভাবে প্রকারগুলি সংজ্ঞায়িত করেছেন তা উত্তরাধিকার নির্দিষ্ট করার জন্য অনুমতি দেয় না, তবে আপনি আর্টমার্কে নির্দেশিত হিসাবে ছেদ ধরনের ব্যবহার করে অনুরূপ কিছু অর্জন করতে পারেন ।


8
হ্যাঁ, তবে শব্দটি interfaceআমার পছন্দ হয় না যখন আমি আসলে একটি বোঝায়type
কুশা

যথেষ্ট ভাল, তারপরে
আর্টেমের

-1

টিএমএসের রি্যাক্টজিসের সাথে টিএসের জন্য নীচের পদ্ধতির সহায়ক হতে পারে

interface Event {
   name: string;
   dateCreated: string;
   type: string;
}

interface UserEvent<T> extends Event<T> {
    UserId: string;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.