打字稿隐式类型(不隐式任何)

Typescript implicit types (not implicit any)

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

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

刚开始接触Typescript,感觉相当于这样写:

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

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

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

现在我正在尝试建立自己的打字稿项目,我想对其进行配置以再次启用该功能。我不确定该怎么做,或者我在想的是不是真正的 Typescript 功能。

这是 Typescript 的真实功能吗?

如果是,我该如何配置 Typescript 来执行此操作?

Basically, in my mind, if I named a variable in a function after a native type, it would seem to implicitly be typed as that type, not as any.

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

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

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

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

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

Is this a real feature in Typescript?

If it is, how do I configure Typescript to do this?

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

最接近您所描述的功能称为上下文打字类型推断。您可以在 TypeScript's documentation for more details.

中查找

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

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

interface Console {

    // ...

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

    // ...
}