Blame view

天文台pc/tianwentai-ui/node_modules/tiny-invariant/src/tiny-invariant.ts 1.8 KB
bc518174   王天杨   提交两个项目文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  const isProduction: boolean = process.env.NODE_ENV === 'production';
  const prefix: string = 'Invariant failed';
  
  /**
   * `invariant` is used to [assert](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions) that the `condition` is [truthy](https://github.com/getify/You-Dont-Know-JS/blob/bdbe570600d4e1107d0b131787903ca1c9ec8140/up%20%26%20going/ch2.md#truthy--falsy).
   *
   * 💥 `invariant` will `throw` an `Error` if the `condition` is [falsey](https://github.com/getify/You-Dont-Know-JS/blob/bdbe570600d4e1107d0b131787903ca1c9ec8140/up%20%26%20going/ch2.md#truthy--falsy)
   *
   * 🤏 `message`s are not displayed in production environments to help keep bundles small
   *
   * @example
   *
   * ```ts
   * const value: Person | null = { name: 'Alex' };
   * invariant(value, 'Expected value to be a person');
   * // type of `value`` has been narrowed to `Person`
   * ```
   */
  export default function invariant(
    condition: any,
    // Not providing an inline default argument for message as the result is smaller
    /**
     * Can provide a string, or a function that returns a string for cases where
     * the message takes a fair amount of effort to compute
     */
    message?: string | (() => string),
  ): asserts condition {
    if (condition) {
      return;
    }
    // Condition not passed
  
    // In production we strip the message but still throw
    if (isProduction) {
      throw new Error(prefix);
    }
  
    // When not in production we allow the message to pass through
    // *This block will be removed in production builds*
  
    const provided: string | undefined = typeof message === 'function' ? message() : message;
  
    // Options:
    // 1. message provided: `${prefix}: ${provided}`
    // 2. message not provided: prefix
    const value: string = provided ? `${prefix}: ${provided}` : prefix;
    throw new Error(value);
  }