簡體   English   中英

打字稿隱式類型(不隱式任何)

[英]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 來做到這一點?

基本上,在我看來,如果我以本機類型命名函數中的變量,它似乎隱式地被鍵入為該類型,而不是any

這是完全錯誤的。 打字稿沒有這樣的功能。 如果您不提及類型,Typescript 會簡單地將其視為any 這與下面的代碼中發生的事情相同。

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

string變量是any類型。 如果您有一個現代 IDE,如果您將鼠標懸停在它上面,它會向您顯示相同的內容。

在此處輸入圖片說明

要給它一個類型,你必須特別提到一個類型,就像你添加的后面的代碼一樣。

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

在此處輸入圖片說明

這是 Typescript 的真正功能嗎?

如果是,我如何配置 Typescript 來做到這一點?

它不是,因此您無法將其配置為正常工作。

與您所描述的最接近的功能稱為Contextual TypingType Inference 您可以在TypeScript 的文檔中查找更多詳細信息

至於您給出的示例, 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;

    // ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM