1/*
2 * Copyright (c) 2023 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
16
17function makeBox<T>(value: T) {
18    return { value };
19};
20
21const makeStringBox = makeBox<string>;  // (value: string) => { value: string }
22const stringBox = makeStringBox('abc');  // { value: string }
23
24type StringBoxMaker = typeof makeBox<string>;  // (value: string) => { value: string }
25type BoxFunc<T> = typeof makeBox<T>;  // (value: T) => { value: T }
26type Box<T> = ReturnType<typeof makeBox<T>>;  // { value: T }
27type StringBox = Box<string>;  // { value: string }