সম্পত্তির প্রকার সংকীর্ণ করার জন্য extend
, নিতজানের উত্তরে যেমন সরল কাজ নির্ভুল হয় :
interface A {
x: string | number;
}
interface B extends A {
x: number;
}
প্রসারিত করার জন্য, বা টাইপটিকে সাধারণভাবে ওভাররাইড করার জন্য, আপনি Zskycat এর সমাধান করতে পারেন :
interface A {
x: string
}
export type B = Omit<A, 'x'> & { x: number };
তবে, যদি আপনার ইন্টারফেসটি A
কোনও সাধারণ ইন্টারফেস প্রসারিত করে, আপনি ব্যবহার করার সময় কাস্টম ধরণের A
অবশিষ্ট প্রকারের বৈশিষ্ট্য হারাবেন Omit
।
যেমন
interface A extends Record<string | number, number | string | boolean> {
x: string;
y: boolean;
}
export type B = Omit<A, 'x'> & { x: number };
let b: B = { x: 2, y: "hi" };
কারণটি হ'ল, Omit
অভ্যন্তরীণভাবে কেবল Exclude<keyof A, 'x'>
কীগুলি চলে যা string | number
আমাদের ক্ষেত্রে সাধারণ হবে be সুতরাং, B
হয়ে যাবে {x: number; }
এবং প্রকারের সাথে কোনও অতিরিক্ত সম্পত্তি গ্রহণ করবে number | string | boolean
।
এটি ঠিক করার জন্য, আমি OverrideProps
নিম্নলিখিত হিসাবে একটি পৃথক ইউটিলিটি টাইপ নিয়ে এসেছি :
type OverrideProps<M, N> = { [P in keyof M]: P extends keyof N ? N[P] : M[P] };
উদাহরণ:
type OverrideProps<M, N> = { [P in keyof M]: P extends keyof N ? N[P] : M[P] };
interface A extends Record<string | number, number | string | boolean> {
x: string;
y: boolean;
}
export type B = OverrideProps<A, { x: number }>;
let b: B = { x: 2, y: "hi" };