![](/img/trans.png)
[英]TypeScript: How to refine a type where one of it's properties is probably null
[英]How to refine prisma type
這是一個非常簡化的案例,我有更高級的案例。 我在我的架構中定義了一個“支付”模型,如下所示:
model Payment {
id Int @default(autoincrement()) @id
covered Boolean?
paid Boolean
amount number
}
執行const payments = Payment.findMany
並選擇所有屬性,這給了我們一個這樣的類型:
type Payment = {
id: number;
covered?: boolean;
paid: boolean;
amount: number;
}
但是我想告訴 Prisma findMany
實際上應該在下面返回這個。 在下面,如果paid
為true
,則covered 是非空的:
type Payment = {
id: number;
amount: number;
} & (
| { paid: false; covered?: never }
| { paid: true; covered: boolean }
)
是否有可能以某種方式告訴 Prisma 這種精致的類型提示? 我在下面的代碼中嘗試了這個:
const payments = await prisma.payment.findMany(.....) as Omit<typeof payments[number], 'paid' | 'covered'> & (
| { paid: false; covered?: never }
| { paid: true; covered: boolean }
);
我認為你最好的選擇是使用所謂的“判別類型”,使用一個共同的財產,在你的情況下是這樣的paid
財產。 這是游樂場的鏈接供您參考
interface BasePayment {
id: number;
paid: boolean;
amount: number;
}
interface PaidPayment extends BasePayment {
paid: true;
covered: boolean;
}
interface UnpaidPayment extends BasePayment {
paid: false;
}
const paidPayment: PaidPayment = {
id: 1,
amount: 10,
covered: true,
paid: true
};
const unpaidPayment: UnpaidPayment = {
id: 1,
amount: 10,
covered: true, // This won't compile because type `UnpaidPayment` doesn't have `covered`
paid: false
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.