Typescript 在接口中,如果另一个属性为“true”或“false”,则在两种类型之间切换`
好的,我不知道这是否可行,但基本上我有一个接口,它接受两个属性:loggedIn boolean和username string | null。只有当loggedIn为true时,才能使接口接受用户名字符串;如果loggedIn为false,则可以使接口接受null 这不是一些有效的Typescript代码,但可能会让您更好地理解: 界面状态{ loggedIn:布尔型; 用户名:State['loggedIn']?字符串:null; }Typescript 在接口中,如果另一个属性为“true”或“false”,则在两种类型之间切换`,typescript,Typescript,好的,我不知道这是否可行,但基本上我有一个接口,它接受两个属性:loggedIn boolean和username string | null。只有当loggedIn为true时,才能使接口接受用户名字符串;如果loggedIn为false,则可以使接口接受null 这不是一些有效的Typescript代码,但可能会让您更好地理解: 界面状态{ loggedIn:布尔型; 用户名:State['loggedIn']?字符串:null; } 这不可能以您编写的方式实现,因为在设置值之前会检查类型。
这不可能以您编写的方式实现,因为在设置值之前会检查类型。可以说您有两个接口,即
interface LoggedInState {
loggedIn: true;
username: string;
}
interface LoggedOutState {
loggedIn: false;
username: null;
}
type UserLoginState = LoggedInState | LoggedOutState;
然后使用那种类型。您的直觉和这种需要记住的方法之间的重要区别在于,类型检查发生在代码运行之前。您编写的方式不可能做到这一点,因为类型是在设置值之前检查的。可以说您有两个接口,即
interface LoggedInState {
loggedIn: true;
username: string;
}
interface LoggedOutState {
loggedIn: false;
username: null;
}
type UserLoginState = LoggedInState | LoggedOutState;
然后使用那种类型。你的直觉和这种需要记住的方法之间的一个重要区别是,类型检查发生在你的代码运行之前。这很好。我没有考虑过接口匹配。谢谢你!当然可以请接受,除非你想让我进一步解释?是的,对不起。我忘了。别担心,泰:-这很好。我没有考虑过接口匹配。谢谢你!当然可以请接受,除非你想让我进一步解释?是的,对不起。我忘了。别担心,泰:-