美文网首页让前端飞
TypeScript——JavaScript文件类型检查(二)

TypeScript——JavaScript文件类型检查(二)

作者: 2o壹9 | 来源:发表于2019-12-28 10:48 被阅读0次

    由arguments推断出的var-args参数声明

    如果一个函数的函数体内有对arguments的引用,那么这个函数会隐式地被认为具有一个var-arg参数(比如:(...arg: any[]) => any))。使用JSDoc的var-arg语法来指定arguments的类型。

    /** @param {...number} args */

    function sum(/* numbers */) {

        var total = 0

        for (var i = 0; i < arguments.length; i++) {

          total += arguments[i]

        }

        return total

    }

    未指定的类型参数默认为any

    由于JavaScript里没有一种自然的语法来指定泛型参数,因此未指定的参数类型默认为any。

    在extends语句中:

    例如,React.Component被定义成具有两个类型参数,Props和State。 在一个.js文件里,没有一个合法的方式在extends语句里指定它们。默认地参数类型为any:

    import { Component } from "react";

    class MyComponent extends Component {

        render() {

            this.props.b; // Allowed, since this.props is of type any

        }

    }

    使用JSDoc的@augments来明确地指定类型。例如:

    import { Component } from "react";

    /**

    * @augments {Component<{a: number}, State>}

    */

    class MyComponent extends Component {

        render() {

            this.props.b; // Error: b does not exist on {a:number}

        }

    }

    在JSDoc引用中:

    JSDoc里未指定的类型参数默认为any:

    /** @type{Array} */

    var x = [];

    x.push(1);        // OK

    x.push("string"); // OK, x is of type Array<any>

    /** @type{Array.<number>} */

    var y = [];

    y.push(1);        // OK

    y.push("string"); // Error, string is not assignable to number

    在函数调用中

    泛型函数的调用使用arguments来推断泛型参数。有时候,这个流程不能够推断出类型,大多是因为缺少推断的源;在这种情况下,类型参数类型默认为any。例如:

    var p = new Promise((resolve, reject) => { reject() });

    p; // Promise<any>;

    相关文章

      网友评论

        本文标题:TypeScript——JavaScript文件类型检查(二)

        本文链接:https://www.haomeiwen.com/subject/ygxsoctx.html