如何知道何时创建接口与直接在 Typescript 的函数签名中定义对象?
How to know when to create an interface vs. defining an object directly in the function signature in Typescript?
写Typescript函数的标准方式是什么?例如,以下三项中哪项是理想的:
// 1
function myFunction (a: string) {}
// 2
function myFunction ({ a }: { a: string }) {}
// 3
interface IMyFunction {
a: string
}
function myFunction (input: IMyFunction) {}
例如,如果有 3 个变量,答案会改变吗?
这些类型的问题是否有好的参考文档?
None 这些是理想的,没有针对这些类型问题的文档,因为这完全由您决定。就像争论是否有必要在JavaScript中的每行末尾写分号:我不写,但很多人都这样做,这没问题。
作为一般规则,最好使用简单的参数,当它们的目的很明显时,例如 Math.sqrt
接受一个数字,很明显,为什么以及它的作用是什么它。参数最有效的其他示例是:
function getUserById(id: number) { /* ... */ }
getUserById(12523)
function displayMessage(text: string) { /* ... */ }
displayMessage('Hello')
同样,没有人禁止您使用对象和接口,只是在这些示例中,参数的含义很明显,而且数量不多。
看看这个函数:
function getUserById(id: number, includeDescription: boolean) {}
在这种情况下,您可能希望使用对象而不是普通参数,因为如果我写 getUserById(12345, true)
,则不清楚这个 true
是什么意思,除非您记得如何编写此函数或看起来在它的定义。所以你可以这样写
function getUserById({
id,
includeDescription
}: {
id: number,
includeDescription?: boolean
}) {}
这完全没问题,除非您在其他地方使用此对象类型。如果你这样做了,那么你可能想要编写一个接口或类型别名,这样你以后就不必重复你的代码了。就个人而言,我通常写类型别名,因为当你在你的编辑器中将鼠标悬停在参数上时,用接口声明,它只显示接口的名称,但使用类型别名,它显示整个对象定义,所以这样更快
type GetUserByIdOptions = {
id: number
includeDescription?: boolean
}
function getUserById({ id, includeDescription }: GetUserByIdOptions) {}
通常如果你有很多参数(比如超过 3 个),那么你会想要使用对象,因为这样更容易记住这些参数是什么。你也不必记住他们的顺序。但同样,这完全取决于您,只要写您觉得更好的东西和您喜欢的东西即可。
写Typescript函数的标准方式是什么?例如,以下三项中哪项是理想的:
// 1
function myFunction (a: string) {}
// 2
function myFunction ({ a }: { a: string }) {}
// 3
interface IMyFunction {
a: string
}
function myFunction (input: IMyFunction) {}
例如,如果有 3 个变量,答案会改变吗?
这些类型的问题是否有好的参考文档?
None 这些是理想的,没有针对这些类型问题的文档,因为这完全由您决定。就像争论是否有必要在JavaScript中的每行末尾写分号:我不写,但很多人都这样做,这没问题。
作为一般规则,最好使用简单的参数,当它们的目的很明显时,例如 Math.sqrt
接受一个数字,很明显,为什么以及它的作用是什么它。参数最有效的其他示例是:
function getUserById(id: number) { /* ... */ }
getUserById(12523)
function displayMessage(text: string) { /* ... */ }
displayMessage('Hello')
同样,没有人禁止您使用对象和接口,只是在这些示例中,参数的含义很明显,而且数量不多。
看看这个函数:
function getUserById(id: number, includeDescription: boolean) {}
在这种情况下,您可能希望使用对象而不是普通参数,因为如果我写 getUserById(12345, true)
,则不清楚这个 true
是什么意思,除非您记得如何编写此函数或看起来在它的定义。所以你可以这样写
function getUserById({
id,
includeDescription
}: {
id: number,
includeDescription?: boolean
}) {}
这完全没问题,除非您在其他地方使用此对象类型。如果你这样做了,那么你可能想要编写一个接口或类型别名,这样你以后就不必重复你的代码了。就个人而言,我通常写类型别名,因为当你在你的编辑器中将鼠标悬停在参数上时,用接口声明,它只显示接口的名称,但使用类型别名,它显示整个对象定义,所以这样更快
type GetUserByIdOptions = {
id: number
includeDescription?: boolean
}
function getUserById({ id, includeDescription }: GetUserByIdOptions) {}
通常如果你有很多参数(比如超过 3 个),那么你会想要使用对象,因为这样更容易记住这些参数是什么。你也不必记住他们的顺序。但同样,这完全取决于您,只要写您觉得更好的东西和您喜欢的东西即可。