首页 > 解决方案 > JavaScript 中的函数参数类型

问题描述

我有一个函数可以遍历一个数组并查找一个数字。

function search(arr, num) { }

此函数将ArrayInteger作为输入。但是我希望参数是它们各自的类型,有什么方法可以设置参数的类型。

标签: javascript

解决方案


JavaScript 是一种松散类型的语言,没有办法以声明的方式说它arr应该是一个数组并且num应该是文档以外的数字(例如JSDoc)。看起来像这样:

/**
 * Searches (insert fuller description here).
 *
 * @param   {number[]} arr The array to search through.
 * @param   {number}   num The number to (use? search for?)
 * @returns (you can use the same {syntax} to say what the return type is)
 */
function search(arr, num) {
    if (!Array.isArray(arr)) {
        throw new Error(`'arr' argument must be an array`);
    }
    if (typeof num !== "number"/* Or use `Number.isInteger(num)` for an integer check [it includes the typecheck]*/) {
        throw new Error(`'num' argument must be a number`);
    }
    // ...do the work...
}

可以在运行时检查。看起来像这样:

function search(arr, num) {
    if (!Array.isArray(arr)) {
        throw new Error(`'arr' argument must be an array`);
    }
    if (typeof num !== "number"/* && perhaps a check for int if that part is really important*/) {
        throw new Error(`'num' argument must be a number`);
    }
    // ...do the work...
}

有一种建立在 JavaScript 之上的语言称为TypeScript,它添加了一个静态类型系统。然后将其编译为 JavaScript 以供浏览器、Node.js 等使用。如果静态类型对您正在做的事情很重要,您可能需要考虑使用它。

在 TypeScript 中,你会这样做(如果你希望数组是一个数字数组):

function search(arr: number[], num: number) {
    // ...
}

这不需要整数,所有 JavaScript 数字都是 IEEE-754 浮点数或BigInts。


推荐阅读