簡體   English   中英

在 TypeScript 中引用推斷類型

[英]Reference an inferred type in TypeScript

有什么方法可以在 TypeScript 中引用推斷類型嗎?

在下面的示例中,我們得到了不錯的推斷類型。

function Test() {
    return {hello:"world"}
}

var test = Test()
test.hello // works
test.bob   // 'bob' doesn't exist on inferred type

但是,如果我想定義一個接受類型參數的函數:“Whatever Test returns”,而不顯式定義接口怎么辦?

function Thing(test:???) {
  test.hello // works
  test.bob   // I want this to fail
}

這是一種解決方法,但如果 Test 有自己的參數,它就會變得很麻煩。

function Thing(test = Test()) {} // thanks default parameter!

有什么方法可以引用任何 Test 返回的推斷類型嗎? 所以我可以在不創建界面的情況下鍵入“無論測試返回什么”的內容?

我關心的原因是因為我通常使用閉包/模塊模式而不是類。 Typescript 已經允許您將某些內容作為一個類來鍵入,即使您可以創建一個描述該類的接口。 我想鍵入一些函數返回的內容而不是類。 有關原因的更多信息,請參閱Typescript 中的閉包(依賴注入)

解決這個問題的最佳方法是,如果 TypeScript 添加了定義將其依賴項作為參數的模塊的能力,或者在閉包中定義模塊。 然后我可以只使用漂亮的export語法。 有人知道是否有這方面的計划嗎?

現在可以:

function Test() {
    return { hello: "world" }
}

function Thing(test: ReturnType<typeof Test>) {
  test.hello // works
  test.bob   // fails
}

https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-inference-in-conditional-types

您可以將接口的主體用作類型文字:

function Thing(test: { hello: string; }) {
    test.hello // works
    test.bob   // I want this to fail
}

相當於

interface ITest {
    hello: string;
}

function Thing(test: ITest) {
    test.hello // works
    test.bob   // I want this to fail
}

只是不要忘記; 在每個成員的末尾。


沒有用於命名或引用推斷類型的語法。 您可以獲得的最接近的方法是為您將要使用的成員使用接口或類型文字。 接口和類型文字將匹配至少具有已定義成員的任何類型。 “鴨子打字”

暫無
暫無

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

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