zoukankan      html  css  js  c++  java
  • [Typescript] Statically Type Unknown Values with TypeScript's unknown Type

    In this lesson, we'll go over TypeScript's unknown type. The unknown type is the type-safe counterpart of the any type. Both unknown and any are so-called top types (also known as universal supertypes) of the type system. This means that every type in TypeScript is assignable to both unknown and any.

    The main difference between the two types is that unknown is much less permissive than any: We have to do some form of checking before performing most operations on values of type unknown, whereas we don't have to do any checks before performing operations on values of type any.

    Another difference is that any is assignable to every type, whereas unknown is only assignable to any and unknown itself. To assign unknown to any other types, we have to narrow it to a more specific type first.

    • Replace `any` in most cases
    • Suitable for library author
    • `unknow` + `function overload` + `type checking`
    function range(from: number, to: number): number[];
    function range(from: unknown, to: unknown): number[] {
      if (typeof from !== "number" || typeof to !== "number") {
        throw Error("range() expects exactly 2 numbers");
      }
    
      const values: number[] = [];
      for (let i = from; i < to; i++) {
        values.push(i);
      }
      return values;
    }
    
    console.log(range(0, 5));

    Function overload: help user to see the correct type `number` instead od `unknown`.

    Why using `unknown` instead of `number` directly?

    function range(from: number, to: number): number[] {
      const values: number[] = [];
      for (let i = from; i < to; i++) {
        values.push(i);
      }
      return values;
    }

    It is good enough for the project you are working on with Typescript.

    But if it is a library. Users might use Javascript without typing system. Without `if type checking`, might casue issue.

  • 相关阅读:
    第一个JAVA程序
    python小项目(python实现鉴黄)源码
    整蛊小病毒,自己拿来快乐
    JavaScript(这里主要侧重于 JavaScript HTML DOM)杂项
    图片与文本基础(html和css)
    CSS的基础学习
    Javascript中this作用域以及bind方法的重写
    斐波那契数列算法求解及速度
    javascript中的描述对象(Descriptor)获取和定义随笔
    vue-cli3生产环境和开发环境路径的替换
  • 原文地址:https://www.cnblogs.com/Answer1215/p/14722241.html
Copyright © 2011-2022 走看看