簡體   English   中英

獲取 Typescript 接口屬性類型,僅給定屬性名稱

[英]Get Typescript interface property type, given property name only

我有一個具有許多屬性的 Typescript 接口。 如果沒有此接口的任何實例,我需要確定給定屬性的類型。

export interface Data {
  foo: string;
  bar: number;
  .
  .
  .
}

這可以在具有非變量字符串的Data上使用索引簽名。

type propType = Data['foo']; // propType = 'string'

但是,它不適用於使用變量。

const propName = 'foo';
type propType = Data[propName]; // Errors

錯誤:

  • 類型“任何”不能用作索引類型.ts(2538)
  • 'propName' 指的是一個值,但在此處用作類型.ts(2749)

這些錯誤都沒有意義,因為propName絕對是string而不是any ,並且它不是“在這里被用作類型”。

更新

很明顯,我試圖做一些不可能的事情。 經過多次斗爭,我終於接受了未實例化的接口在運行時不會也永遠不會有屬性或屬性類型信息。

這種使用type的方法將起作用,但僅在編譯時起作用。 我用正確的語法批准了答案。

(仍然認為我問題中的錯誤消息很奇怪。)

你有兩個解決方案。 任何一個

export interface Data {
  foo: string;
  bar: number;
}

type propName = 'bar';
type propType = Data[propName]; //number

或者

export interface Data {
  foo: string;
  bar: number;
}

const propName = 'bar'; //or let propName: 'bar' = 'bar' (both are type literals)
type propType = Data[typeof propName]; //number (typeof propName is 'bar')

暫無
暫無

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

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