@@ -3078,6 +3078,54 @@ Syntax(Chunk)@0..106
30783078 assert_ast_eq ! ( code, result) ;
30793079 }
30803080
3081+ #[ test]
3082+ fn test_alias_conditional_keyof ( ) {
3083+ let code = r#"---@alias D<T,K> K extends keyof T and K or never"# ;
3084+ let result = r#"
3085+ Syntax(Chunk)@0..49
3086+ Syntax(Block)@0..49
3087+ Syntax(Comment)@0..49
3088+ Token(TkDocStart)@0..4 "---@"
3089+ Syntax(DocTagAlias)@4..49
3090+ Token(TkTagAlias)@4..9 "alias"
3091+ Token(TkWhitespace)@9..10 " "
3092+ Token(TkName)@10..11 "D"
3093+ Syntax(DocGenericDeclareList)@11..16
3094+ Token(TkLt)@11..12 "<"
3095+ Syntax(DocGenericParameter)@12..13
3096+ Token(TkName)@12..13 "T"
3097+ Token(TkComma)@13..14 ","
3098+ Syntax(DocGenericParameter)@14..15
3099+ Token(TkName)@14..15 "K"
3100+ Token(TkGt)@15..16 ">"
3101+ Token(TkWhitespace)@16..17 " "
3102+ Syntax(TypeConditional)@17..49
3103+ Syntax(TypeBinary)@17..34
3104+ Syntax(TypeName)@17..18
3105+ Token(TkName)@17..18 "K"
3106+ Token(TkWhitespace)@18..19 " "
3107+ Token(TkDocExtends)@19..26 "extends"
3108+ Token(TkWhitespace)@26..27 " "
3109+ Syntax(TypeUnary)@27..34
3110+ Token(TkDocKeyOf)@27..32 "keyof"
3111+ Token(TkWhitespace)@32..33 " "
3112+ Syntax(TypeName)@33..34
3113+ Token(TkName)@33..34 "T"
3114+ Token(TkWhitespace)@34..35 " "
3115+ Token(TkAnd)@35..38 "and"
3116+ Token(TkWhitespace)@38..39 " "
3117+ Syntax(TypeName)@39..40
3118+ Token(TkName)@39..40 "K"
3119+ Token(TkWhitespace)@40..41 " "
3120+ Token(TkOr)@41..43 "or"
3121+ Token(TkWhitespace)@43..44 " "
3122+ Syntax(TypeName)@44..49
3123+ Token(TkName)@44..49 "never"
3124+ "# ;
3125+
3126+ assert_ast_eq ! ( code, result) ;
3127+ }
3128+
30813129 #[ test]
30823130 fn test_alias_nested_conditional ( ) {
30833131 let code = r#"
0 commit comments