• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16class A{
17    field1:int;
18    field2:int;
19    method1(){};
20}
21
22function foo(){}
23
24function main():void{
25    type UnionA = A|string|undefined
26    type keyofUnion = keyof /* @@ label1 */unionA/* @@ label2 */;
27
28    type keyofNever = keyof never/* @@ label3 */;
29
30    type keyofFunction = keyof /* @@ label4 */foo/* @@ label5 */;
31
32    type keyofVoid = keyof /* @@ label6 */void/* @@ label7 */;
33}
34
35/* @@@ label1 Error TypeError: Cannot find type 'unionA'.  */
36/* @@@ label2 Error TypeError: The `keyof` keyword can only be used for class or interface type.  */
37/* @@@ label3 Error TypeError: The `keyof` keyword can only be used for class or interface type.  */
38/* @@@ label4 Error TypeError: Cannot find type 'foo'.  */
39/* @@@ label5 Error TypeError: The `keyof` keyword can only be used for class or interface type.  */
40/* @@@ label6 Error TypeError: 'void' used as type annotation.  */
41/* @@@ label7 Error TypeError: The `keyof` keyword can only be used for class or interface type.  */
42