0

在我从事的 Typescript 项目中,我无法再访问,我记得似乎能够执行以下操作:

const fn = string => console.log(string)

作为 Typescript 的新手,它似乎相当于写这个:

const fn = (string:string) => console.log(string)

基本上,在我看来,如果我在函数中以本机类型命名变量,它似乎隐含地被键入为该类型,而不是any.

不过当时我对 Typescript 还是很陌生,所以完全有可能真的发生了其他事情,我只是误解了这种情况。

现在我正在尝试建立自己的打字稿项目,我想对其进行配置以再次允许该功能。我不知道该怎么做,或者我所想的是否是一个真正的 Typescript 功能。

这是 Typescript 中的真正功能吗?

如果是,我该如何配置 Typescript 来做到这一点?

4

2 回答 2

3

基本上,在我看来,如果我在函数中以本机类型命名变量,它似乎隐含地被键入为该类型,而不是 any.

这是完全错误的。Typescript 没有这样的功能。如果您不提及类型,Typescript 将简单地将其视为any. 这与下面的代码中发生的事情相同。

const fn = string => console.log(string)

string变量是any类型。如果你有一个现代 IDE,如果你将鼠标悬停在它上面,它会向你显示同样的东西。

在此处输入图像描述

要给它一个类型,你必须特别提到一个类型,就像你添加的后一个代码一样。

const fn = (string:string) => console.log(string)

在此处输入图像描述

这是 Typescript 中的真正功能吗?

如果是,我该如何配置 Typescript 来做到这一点?

它不是,因此您无法将其配置为正常工作。

于 2019-12-11T14:05:35.613 回答
1

与您所描述的最接近的功能称为Contextual TypingType Inference。您可以在TypeScript 的文档中查找更多详细信息

至于您给出的示例,标准(节点)定义console.log是期望message参数为 byany类型。这就是为什么在这种情况下您的string参数推断为any类型。

// src: node_modules/@types/node/globals.d.ts

interface Console {

    // ...

    /**
     * Prints to `stdout` with newline
     */
     log(message?: any, ...optionalParams: any[]): void;

    // ...
}
于 2019-12-11T14:19:21.923 回答