簡體   English   中英

針對 typescript 中的接口進行動態類型檢查

[英]Dynamic type checking against interface in typescript

export function createListItems<T>(data:any[]): T[]{
    const items: T[] = [];
    for (let i = 0; i < data.length; i++) {
        let obj: Partial<Record<keyof T,string | number >>={};//must have age and name, string and number type 
          Object.keys(data[i]).map((key:string) => {
              obj[key]=data[i][key];//taking address as well and boolean type as well
          });
          items.push(obj as T);
        
    }
    return items;
}

interface userDetails{
  name:string;
  age:number;
}


console.log(createListItems<userDetails>([{name:true,address:false},{name:"kailash",age:"string"}]);

在上面的代碼中, obj應該只取 name 和 age,但也取 address 屬性。 它應該只接受字符串和數字類型,但也接受 boolean 類型。 我希望名稱應該是純字符串類型,年齡應該是純數字類型。 但是對於名稱屬性,它甚至動態地采用 boolean 值。 如何檢查接口中是否存在動態鍵,並且它的值與接口中定義的類型匹配?

當你說let obj: Partial<Record<keyof T,string | number >>={} let obj: Partial<Record<keyof T,string | number >>={}你是說obj將是一個記錄,其中鍵是 T 的鍵,值是字符串或數字。 但是,您聲明 function 采用any類型的數組。 類型any不是真正的類型,它更像是一個標志,上面寫着“禁用對這個東西的所有類型檢查”,所以當你迭代數據時,它的值也都是類型any ,所以 TypeScript 相信該類型是正確的。

If you want the function to only accept items with that type, then you need to declare that in the arguments to the function with something like function createListItems<T>( data: Partial<T>[] ): T[] . 如果您確實希望參數接受any並且只返回T[]則由您來確保類型正確,如果您使用 type any有效地告訴它不幫助您,TypeScript 可以幫助您。

暫無
暫無

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

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