是否有一种方法可以让javascript函数知道某个参数是某个类型的?
能够做这样的事情将是完美的:
function myFunction(Date myDate, String myString)
{
//do stuff
}
谢谢你!
更新:作为答案是一个响亮的“不”,如果我想myDate被视为一个日期(为了在它上调用日期函数),我必须将其转换为函数内的日期或设置一个日期类型的新变量?
是否有一种方法可以让javascript函数知道某个参数是某个类型的?
能够做这样的事情将是完美的:
function myFunction(Date myDate, String myString)
{
//do stuff
}
谢谢你!
更新:作为答案是一个响亮的“不”,如果我想myDate被视为一个日期(为了在它上调用日期函数),我必须将其转换为函数内的日期或设置一个日期类型的新变量?
当前回答
解释
我不确定我的答案是否直接回答了最初的问题,但我想很多人来这里只是为了找到一种方法让他们的ide理解类型,我将分享我的发现。
如果你想让VSCode理解你的类型,请按照下面的步骤进行。请注意,js运行时和NodeJS根本不关心这些类型。
解决方案
1-用.d创建一个文件。Ts结尾:例如:index.d.ts。您可以在另一个文件夹中创建此文件。例如:types/index.d.ts 假设我们想要一个叫做view的函数。将这些行添加到index.d.ts中:
/**
* Use express res.render function to render view file inside layout file.
*
* @param {string} view The path of the view file, relative to view root dir.
* @param {object} options The options to send to view file for ejs to use when rendering.
* @returns {Express.Response.render} .
*/
view(view: string, options?: object): Express.Response.render;
3-创建jsconfig。Json文件在你的项目的根。(看起来仅仅创建这个文件就足以让VSCode搜索你的类型了)。
再多一点
现在假设我们想把这个类型添加到另一个库类型中。(就我自己的情况而言)。我们可以使用一些ts的关键字。只要VSCode理解ts,我们就没有问题。 例如,如果你想把这个视图函数添加到response from expressjs中,修改index.d.ts文件如下:
export declare global {
namespace Express {
interface Response {
/**
* Use express res.render function to render view file inside layout file.
*
* @param {string} view The path of the view file, relative to view root dir.
* @param {object} options The options to send to view file for ejs to use when rendering.
* @returns {Express.Response.render} .
*/
view(view: string, options?: object): Express.Response.render;
}
}
}
结果
其他回答
不,JavaScript不是静态类型语言。有时可能需要手动检查函数体中的参数类型。
TypeScript是目前最好的解决方案之一。
TypeScript通过向语言中添加类型来扩展JavaScript。
Typescript版本演示
// type alias
type myDateType = Date;
type myStringType = string;
function myFunction(myDate: myDateType, myString: myStringType) {
// do stuff
console.log(`myDate =`, myDate);
console.log(`myString =`, myString);
}
myFunction(new Date(), 'TypeScript is awesome!');
试试这个在线游乐场
refs
https://www.typescriptlang.org/
这可以很容易地用ArgueJS完成:
function myFunction ()
{
arguments = __({myDate: Date, myString: String});
// do stuff
};
看看来自Facebook的新Flow库,“一个静态类型检查器,旨在发现JavaScript程序中的类型错误”
定义:
/* @flow */
function foo(x: string, y: number): string {
return x.length * y;
}
foo('Hello', 42);
类型检查:
$> flow
hello.js:3:10,21: number
This type is incompatible with
hello.js:2:37,42: string
下面是如何运行它。
解释
我不确定我的答案是否直接回答了最初的问题,但我想很多人来这里只是为了找到一种方法让他们的ide理解类型,我将分享我的发现。
如果你想让VSCode理解你的类型,请按照下面的步骤进行。请注意,js运行时和NodeJS根本不关心这些类型。
解决方案
1-用.d创建一个文件。Ts结尾:例如:index.d.ts。您可以在另一个文件夹中创建此文件。例如:types/index.d.ts 假设我们想要一个叫做view的函数。将这些行添加到index.d.ts中:
/**
* Use express res.render function to render view file inside layout file.
*
* @param {string} view The path of the view file, relative to view root dir.
* @param {object} options The options to send to view file for ejs to use when rendering.
* @returns {Express.Response.render} .
*/
view(view: string, options?: object): Express.Response.render;
3-创建jsconfig。Json文件在你的项目的根。(看起来仅仅创建这个文件就足以让VSCode搜索你的类型了)。
再多一点
现在假设我们想把这个类型添加到另一个库类型中。(就我自己的情况而言)。我们可以使用一些ts的关键字。只要VSCode理解ts,我们就没有问题。 例如,如果你想把这个视图函数添加到response from expressjs中,修改index.d.ts文件如下:
export declare global {
namespace Express {
interface Response {
/**
* Use express res.render function to render view file inside layout file.
*
* @param {string} view The path of the view file, relative to view root dir.
* @param {object} options The options to send to view file for ejs to use when rendering.
* @returns {Express.Response.render} .
*/
view(view: string, options?: object): Express.Response.render;
}
}
}
结果