উত্তর:
টাইপস্ক্রিপ্ট ৩.৫-এ, Omit
প্রকারটি পাঠাগারে যুক্ত করা হয়েছিল। এটি কীভাবে ব্যবহার করতে হয় তার জন্য নীচের উদাহরণগুলি দেখুন।
টাইপস্ক্রিপ্ট ২.৮-তে, Exclude
প্রকারটি পাঠাগারে স্ট্যান্ডার্ড লাইব্রেরিতে যুক্ত করা হয়েছিল, যা একটি বাদ পড়ার প্রকারটি কেবল এইভাবে লেখা যায়:
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
আপনি Exclude
২.৮ এর নীচের সংস্করণগুলিতে প্রকারটি ব্যবহার করতে পারবেন না , তবে উপরের মত একই ধরণের সংজ্ঞা ব্যবহার করতে আপনি এর জন্য একটি প্রতিস্থাপন তৈরি করতে পারেন। তবে, এই প্রতিস্থাপনটি কেবল স্ট্রিং প্রকারের জন্য কাজ করবে, সুতরাং এটি ততটা শক্তিশালী নয় Exclude
।
// Functionally the same as Exclude, but for strings only.
type Diff<T extends string, U extends string> = ({[P in T]: P } & {[P in U]: never } & { [x: string]: never })[T]
type Omit<T, K extends keyof T> = Pick<T, Diff<keyof T, K>>
এবং এই ধরণের ব্যবহারের একটি উদাহরণ:
interface Test {
a: string;
b: number;
c: boolean;
}
// Omit a single property:
type OmitA = Omit<Test, "a">; // Equivalent to: {b: number, c: boolean}
// Or, to omit multiple properties:
type OmitAB = Omit<Test, "a"|"b">; // Equivalent to: {c: boolean}
Omit<{a?: string, b?: boolean}, "b">
ফলাফলগুলি {a: string | undefined}
, যা এখনও undefined
মান হিসাবে গ্রহণ করে তবে optionচ্ছিক পরিবর্তকটি হারায় a
। :(
Pick
আমি দেখতে পাচ্ছি।
Omit
এখানে দেওয়া থেকে পৃথক। স্টাডলিবে এটি type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
পরিবর্তন, যদিও সামান্য কিছুটা বিতর্ক সৃষ্টি করেছে তাই পার্থক্য সম্পর্কে সচেতন হন।
টাইপস্ক্রিপ্ট ২.৮ সহ, আপনি নতুন অন্তর্নির্মিত Exclude
প্রকারটি ব্যবহার করতে পারেন । 2.8 রিলিজ নোট আসলে অধ্যায় "পূর্বনির্ধারিত শর্তসাপেক্ষ ধরনের" এ এই উল্লেখ:
দ্রষ্টব্য: বাদ দেওয়া প্রকারটি এখানে প্রস্তাবিত ডিফ টাইপের একটি যথাযথ বাস্তবায়ন। [...] ওমিট প্রকারটি আমরা অন্তর্ভুক্ত করি নি কারণ এটি তুচ্ছ হিসাবে লেখা হয়েছে
Pick<T, Exclude<keyof T, K>>
।
আপনার উদাহরণটিতে এটি প্রয়োগ করে, এক্সওয়াই টাইপটিকে সংজ্ঞায়িত করা যেতে পারে:
type XY = Pick<XYZ, Exclude<keyof XYZ, "z">>
আমি কিছু ভেরিয়েবল ঘোষণার এবং স্প্রেড অপারেটর ব্যবহার করে অনুমানের ধরণের সমাধান খুঁজে পেয়েছি :
interface XYZ {
x: number;
y: number;
z: number;
}
declare var { z, ...xy }: XYZ;
type XY = typeof xy; // { x: number; y: number; }
এটি কাজ করে, তবে এর থেকে আরও ভাল সমাধান দেখে আমি আনন্দিত হব।
typeof
টাইপ স্ক্রিপ্টের আরও অনাকাঙ্ক্ষিত বৈশিষ্ট্যগুলির মধ্যে একটি।
type Smth = XY & { z: string };
,?
আপনি যদি কোনও লাইব্রেরি ব্যবহার করতে পছন্দ করেন তবে টিএস-প্রয়োজনীয় ব্যবহার করুন ।
import { Omit } from "ts-essentials";
type ComplexObject = {
simple: number;
nested: {
a: string;
array: [{ bar: number }];
};
};
type SimplifiedComplexObject = Omit<ComplexObject, "nested">;
// Result:
// {
// simple: number
// }
// if you want to Omit multiple properties just use union type:
type SimplifiedComplexObject = Omit<ComplexObject, "nested" | "simple">;
// Result:
// { } (empty type)
PS: আপনি সেখানে প্রচুর অন্যান্য দরকারী স্টাফ পাবেন;)
টাইপসক্রিপ্ট 3.5 হিসাবে, ওমিট সহায়কটি অন্তর্ভুক্ত করা হবে: টাইপস্ক্রিপ্ট ৩.৫ আরসি - ওমিট সহায়ক সাহায্যকারী প্রকার
আপনি এটি সরাসরি ব্যবহার করতে পারেন এবং আপডেট করার সময় আপনার ওমিট সহায়কের নিজস্ব সংজ্ঞাটি মুছে ফেলা উচিত।
ইন টাইপ করা বিষয় 3.5+ :
interface TypographyProps {
variant: string
fontSize: number
}
type TypographyPropsMinusVariant = Omit<TypographyProps, "variant">
আমি এরকম করি:
interface XYZ {
x: number;
y: number;
z: number;
}
const a:XYZ = {x:1, y:2, z:3};
const { x, y, ...last } = a;
const { z, ...firstTwo} = a;
console.log(firstTwo, last);
Diff<T, U>
(সঙ্গেT
এবংU
কী জন্য উপলব্ধ ধরনের হিসাবে) হিসেবেT
একটি জন্য মান হিসাবে কী একই টাইপ: 3 ধরনের একটি ছেদ -keyed উপসেটT
সঙ্গে টাইপnever
জন্যU
এবং টাইপnever
সমস্ত কী জন্য। তারপরে সঠিক মানের ধরণ পেতে আপনি সূচকের মাধ্যমে এটি পাস করুন। আমি কি সঠিক?