[英]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 Typing或Type 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.