簡體   English   中英

為什么 TypeScript 會忽略類型約束?

[英]Why does TypeScript ignore the type constraint?

我們定義了get(o, key, default_value) function,它應該與滿足{ get: (key: K, default_value: D) => R }接口的任何 Object 一起使用。

TypeScript 應該驗證只有這樣的對象才能傳遞給get function。

但它也允許傳遞{ get: (key: K) => R } object,這是錯誤的。

function get<K, D, R>(
  o: { get: (key: K, default_value: D) => R }, key: K, dvalue: D
): R {
  return o.get(key, dvalue);
}

class Params {
  constructor(public values: { [key: string]: number }) { }

  get(key: string): number | undefined {
    return this.values[key]
  }
}
const params = new Params({ a: 10 });

console.log(get(params, "a", 5))

為什么它會忽略約束並允許這樣的代碼編譯? 有沒有辦法強制執行約束?

這是因為: (key: K) => R(key: K, default_value: D) => R的子類型,因此可以將前者的實例分配給后者。 請參閱比較兩個函數 當這個賦值發生時,它基本上意味着忽略傳遞給 function 的額外參數,這在 javascript 中很常見

暫無
暫無

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

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