1/* 2 * Copyright (c) 2022-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 16function foo(path: string): void { 17 console.log(path); 18} 19 20foo.bar = (path: string): string => { 21 return path + ': foo.bar'; 22}; 23 24foo.baz = 1; 25 26foo.bah = { x: 1, y: 2 }; 27 28console.log(foo.baz); 29console.log(foo.bah); 30console.log(foo.name); 31console.log(foo.length); 32console.log(foo.arguments); 33console.log(foo.caller); 34 35// Arrow function 36const foo2 = (path: string) => { 37 console.log(path); 38}; 39 40foo2.bar = 2; 41console.log(foo2.bar); 42console.log(foo2.name); 43console.log(foo2.length); 44console.log(foo2.arguments); 45console.log(foo2.caller); 46 47// Std 'Function' type 48const stdFunc: Function = (path: string) => { 49 console.log(path); 50}; 51 52console.log(stdFunc.name); 53console.log(stdFunc.length); 54console.log(stdFunc.arguments); 55console.log(stdFunc.caller); 56 57// Functional type 58type FuncType = (path: string) => void; 59let ft: FuncType = (path: string): string => { 60 return path + ': foo.bar'; 61}; 62 63console.log(ft.name); 64console.log(ft.length); 65console.log(ft.caller); 66 67// Functional type alias 68type FT2 = FuncType; 69let ft2: FT2 = (path: string): string => { 70 return path + ': foo.bar'; 71}; 72 73console.log(ft2.name); 74console.log(ft2.length); 75console.log(ft2.caller);