• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2* Copyright (c) Microsoft Corporation. All rights reserved.
3* Copyright (c) 2023 Huawei Device Co., Ltd.
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8*     http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*
16* This file has been modified by Huawei to verify type inference by adding verification statements.
17*/
18
19// === tests/cases/compiler/selfReferencingTypeReferenceInference.ts ===
20declare function AssertType(value:any, type:string):void;
21
22interface Box<T> {
23    __: T
24}
25
26type Recursive<T> =
27    | T
28    | Box<Recursive<T>>
29
30type InferRecursive<T> = T extends Recursive<infer R> ? R : "never!"
31
32// the type we are testing with
33type t1 = Box<string | Box<number | boolean>>
34
35type t2 = InferRecursive<t1>
36type t3 = InferRecursive<Box<string | Box<number | boolean>>> // write t1 explicitly
37
38  // Why is t2 and t3 different??
39  // They have same input type!
40
41