[英]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'}
}
You can leverage Record with string
as key's type and Person
as value's type.您可以将Record与string
作为键的类型和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.