Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 在接口中,如果另一个属性为“true”或“false”,则在两种类型之间切换`_Typescript - Fatal编程技术网

Typescript 在接口中,如果另一个属性为“true”或“false”,则在两种类型之间切换`

Typescript 在接口中,如果另一个属性为“true”或“false”,则在两种类型之间切换`,typescript,Typescript,好的,我不知道这是否可行,但基本上我有一个接口,它接受两个属性:loggedIn boolean和username string | null。只有当loggedIn为true时,才能使接口接受用户名字符串;如果loggedIn为false,则可以使接口接受null 这不是一些有效的Typescript代码,但可能会让您更好地理解: 界面状态{ loggedIn:布尔型; 用户名:State['loggedIn']?字符串:null; } 这不可能以您编写的方式实现,因为在设置值之前会检查类型。

好的,我不知道这是否可行,但基本上我有一个接口,它接受两个属性: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;

然后使用那种类型。你的直觉和这种需要记住的方法之间的一个重要区别是,类型检查发生在你的代码运行之前。

这很好。我没有考虑过接口匹配。谢谢你!当然可以请接受,除非你想让我进一步解释?是的,对不起。我忘了。别担心,泰:-这很好。我没有考虑过接口匹配。谢谢你!当然可以请接受,除非你想让我进一步解释?是的,对不起。我忘了。别担心,泰:-