由arguments推斷出的var-args參數(shù)聲明
如果一個函數(shù)的函數(shù)體內(nèi)有對arguments的引用仗阅,那么這個函數(shù)會隱式地被認為具有一個var-arg參數(shù)(比如:(...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
}
未指定的類型參數(shù)默認為any
由于JavaScript里沒有一種自然的語法來指定泛型參數(shù),因此未指定的參數(shù)類型默認為any。
在extends語句中:
例如,React.Component被定義成具有兩個類型參數(shù),Props和State憨栽。 在一個.js文件里,沒有一個合法的方式在extends語句里指定它們翼虫。默認地參數(shù)類型為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里未指定的類型參數(shù)默認為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
在函數(shù)調(diào)用中
泛型函數(shù)的調(diào)用使用arguments來推斷泛型參數(shù)。有時候珍剑,這個流程不能夠推斷出類型掸宛,大多是因為缺少推斷的源;在這種情況下招拙,類型參數(shù)類型默認為any唧瘾。例如:
var p = new Promise((resolve, reject) => { reject() });
p; // Promise<any>;