参数类型的`(x: number) => void` 和`function(number) : void` 语法有什么区别?
What is the difference between `(x: number) => void` and `function(number) : void` syntax for parameter types?
在创建将回调作为参数的 javascript 函数时,我可以像这样为 IntelliSense 添加类型:
/**
* @param {function(number) : void} cb
*/
function takesCallback1(cb) {}
或类似
/**
* @param {(x: number) => void} cb
*/
function takesCallback2(cb) {}
两者有什么区别,应该在什么情况下使用?
function() :
是 JSDoc 语法,而 () =>
是 TypeScript 语法。两者均受 IntelliSense 支持,但前者仅在 JSDoc 注释中受支持。
type TypeScriptSignature = (x: number) => void;
type JSDocSignature = function(number) : void;
// ^^^^^^^^^^^^^^^^^^^^^^^-JSDoc types can only be used inside
// documentation comments. TS8020
除此之外,两者之间唯一的显着区别是 TypeScript 语法允许您指定参数的名称。
如果将鼠标悬停在 this playground link 的两个 cb
参数上,您会看到 JSDoc 类型已转换为参数名称设置为 arg0
的 Typescript 类型。
/**
* @param {function(number) : void} cb
*/
function takesCallback1(cb) {}
// ^^
// (arg0: number) => void
/**
* @param {(x: number) => void} cb
*/
function takesCallback2(cb) {}
// ^^
// (x: number) => void
那么你应该使用哪一个?如果您使用 JSDoc.app 生成文档,您应该使用 JSDoc 类型。如果您只关心 IntelliSense 是否正确,两者都可以,但 TypeScript 语法允许您指定参数名称。
在创建将回调作为参数的 javascript 函数时,我可以像这样为 IntelliSense 添加类型:
/**
* @param {function(number) : void} cb
*/
function takesCallback1(cb) {}
或类似
/**
* @param {(x: number) => void} cb
*/
function takesCallback2(cb) {}
两者有什么区别,应该在什么情况下使用?
function() :
是 JSDoc 语法,而 () =>
是 TypeScript 语法。两者均受 IntelliSense 支持,但前者仅在 JSDoc 注释中受支持。
type TypeScriptSignature = (x: number) => void;
type JSDocSignature = function(number) : void;
// ^^^^^^^^^^^^^^^^^^^^^^^-JSDoc types can only be used inside
// documentation comments. TS8020
除此之外,两者之间唯一的显着区别是 TypeScript 语法允许您指定参数的名称。
如果将鼠标悬停在 this playground link 的两个 cb
参数上,您会看到 JSDoc 类型已转换为参数名称设置为 arg0
的 Typescript 类型。
/**
* @param {function(number) : void} cb
*/
function takesCallback1(cb) {}
// ^^
// (arg0: number) => void
/**
* @param {(x: number) => void} cb
*/
function takesCallback2(cb) {}
// ^^
// (x: number) => void
那么你应该使用哪一个?如果您使用 JSDoc.app 生成文档,您应该使用 JSDoc 类型。如果您只关心 IntelliSense 是否正确,两者都可以,但 TypeScript 语法允许您指定参数名称。