我有一個背景關系提供程式,它在整個應用程式中流式傳輸用戶資料。
我有一個學生界面:
export interface Student extends User
我想提供商回傳型別的用戶資料Student或User如下:
let userData: Student | User = null;
當嘗試訪問僅對學生可用的屬性時userData?.currentTeam,VS Code 會引發以下錯誤:
Property 'currentTeam' does not exist on type 'Student | User'.
Property 'currentTeam' does not exist on type 'User'.ts(2339)
我需要幫助找出為什么它默認為父界面以及如何允許兩者的選項。
uj5u.com熱心網友回復:
這是聯合的標準行為:除非你做一些事情來檢查你正在處理的型別,否則打字稿將只允許你訪問聯合所有成員上存在的屬性。
以下是一些如何縮小型別的示例。您可以檢查該屬性是否存在:
if ('currentTeam' in userData) {
console.log(userData.currentTeam);
}
或者,如果您創建了類(您可能沒有),則可以使用以下實體:
if (userData instanceof Student) {
console.log(userData.currentTeam);
}
或者,您可以更改型別,使它們都有一個共同的屬性,然后您可以檢查該屬性以查看您正在處理的型別。這有時被稱為“歧視工會”。
interface User {
type: 'user',
// rest of the type here
}
interface Student extends User {
type: 'student',
currentTeam: // something,
// rest of the type here
}
if (userData.type === 'student') {
console.log(userData.currentTeam);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/364349.html
