所以我最近从 React Native 中的 Javascript 切换到 Typescript,在检查
useNavigation
钩子时遇到了一个问题。
const nav: typechecking = useNavigation()
和
const nav = useNavigation<typechecking>()
它们都适用于我的代码,但我在思考它们之间的区别?
但是,正确的解释是什么?
就像,我能想到的是,因为
useNavigation()
钩子可以有多种返回类型,所以我们在第二个钩子中将他的返回类型限制为 typechecking
。useNavigation()
钩子接收所有类型,但仅检查 typechecking
的导航。
TLDR 没有区别。
以下是显式类型注释。您告诉编译器
nav
有一个指定的类型 typechecking
(您通常希望用大写字母编写类型)。
const nav: typechecking = useNavigation()
它没有显式类型注释,并且
nav
的类型由编译器根据 useNavigation<typechecking>()
的返回类型自动推断。相反,您将通用参数传递给函数,该参数(可能基于函数声明)会影响其返回类型。
const nav = useNavigation<typechecking>()
我们可以通过查看声明来确认这个假设(Github 上的源代码)。您会看到该函数返回通用参数
T
。
export function useNavigation<
T = NavigationProp<ReactNavigation.RootParamList>
>(): T {
// implementation
}
如上所述,现在
nav
的类型将根据 useNavigation()
的返回类型(即您作为泛型参数传递的任何类型)自动推断。