简体   繁体   English

约束类型以具有特定类型的属性

[英]constraint a type to have properties of a specific type

interface Person {id:number, name:string}


const someFunction(people: ???) => {...}

Question: Is it possible to typeguard people parameter to only accept an object with all properties as a Person.问题:是否可以对 people 参数进行类型保护以仅接受具有所有属性的对象作为 Person。 Such as:如:

people:{
   user1:{id:1,name:'user1'},
   user2:{id:1,name:'user2'},
   user3:{id:1,name:'user3'}
}

Record<Keys,Type>记录<键,类型>

You can leverage Record with string as key's type and Person as value's type.您可以将Recordstring作为键的类型和Person作为值的类型。

interface Person {
  id: number,
  name: string,
}

const someFunction = (people: Record<string, Person>) => {
  // function logic here
};

someFunction({
  user1: { id: 1, name: 'user1' },
  user2: { id: 1, name: 'user2' },
  user3: { id: 1, name: 'user3' },
});

You can use index signatures :您可以使用索引签名

interface Person {id:number, name:string}

const someFunction = (people: { [index:string]: Person }) => { /* ... */ }

someFunction({
   user1:{id:1,name:'user1'},
   user2:{id:1,name:'user2'},
   user3:{id:1,name:'user3'}
});

Based on the question a custom type with a dynamic key might be useful根据问题,带有动态键的自定义类型可能有用

interface Person {id:number, name:string}

type People = {
    [key:string]:Person;
}

const someFunction = (people:People ) => {...}

someFunction({"user1":{id:1,name:"name1"},"user2":{id:1,name:"name2"}})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM