簡體   English   中英

TypeScript如何推斷數組文字的元素類型?

[英]How does TypeScript infer element type for array literals?

特別是為什么要編譯此代碼(使用--noImplicitAny)

function x() {
    const c = [];
    c.push({});
    c.indexOf({});
    return c;
}

同時,這不會:

function x() {
    const c = [];
    c.indexOf({});
    c.push({});
    return c;
}

在此處輸入圖片說明

這是預期的行為,請參閱此GitHub 問題 那里描述的功能與您的相似,問題是為什么打開noImplicitAny不會出現錯誤:

function foo() {
  const x = []
  x.push(3)
  return x
}

數組的類型被推斷為“進化數組”類型。 然后它變成number后的第一個x.push foo應該返回number [] 如果在控制流可以確定x的類型之前就看到了x的類型,則會產生錯誤。 例如:

function foo() {
  const x = []
  x.push(3)
  return x;

  function f() { 
    x; // error, x is `any`.
  }
}

因此,在您的情況下, indexOf在確定類型並引發錯誤之前會見證數組的類型。 如果在push后調用indexOf ,則確定類型,並且不會引發錯誤。

暫無
暫無

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

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