我有一个PersonTypes
对象的数组,只想在forEach循环中使用部分键。更
精确,正确的打字稿编码以提供类型?我可以做类似的事情
people.forEach((person: Pick<PersonTypes, 'name' | 'gender'>
要么
people.forEach((person: PersonTypes) =>{
要么
people.forEach((person: any) =>{
用打字稿编码的正确方法是什么
export type PersonTypes = {
name: string;
value: string;
gender: boolean;
};
const people: PersonTypes[] = [
{name: 'apl', value: 'apple', gender: true},
{name: 'gal', value: 'google', gender: false},
]
people.forEach((person: Pick<PersonTypes, 'name' | 'gender'>) =>{
//people.forEach((person: PersonTypes) =>{
//people.forEach((person: any) =>{
console.log(person.name);
console.log(person.gender);
} )
答案 0 :(得分:6)
您应该坚持:
people.forEach((person: PersonTypes) =>{
});
这是因为people
数组中的每个对象的类型均为PersonTypes
,实际上并不需要从该类型中提取属性。
实际上,不需要像PersonTypes
那样将person明确地键入为PersonTypes[]
。 TypeScript会自动推断出数组中的每个对象都是PersonTypes
,所以这就足够了:
people.forEach((person) =>{
});
或者,您可以选择分解参数,这将使您的函数更加简洁明了。
people.forEach(({ name, gender }) =>{
console.log(name);
console.log(gender);
});
答案 1 :(得分:1)
根据您提供的其他代码,customZip
函数返回的类型为any
,这当然会在以后引起问题,因为该数组将具有any
的类型,而不是推断出的PersonType[]
:
export function customZip(...arrays: Array<any>){
return arrays
}
要解决此问题,它就像使用generics in TypeScript的概念一样简单,它允许编译器自己推断数组的类型:
export function customZip<T>(...arrays: Array<T>){
return arrays
}
您可以选择提供一种类型,或者只是让TypeScript自行推断。在这一点上并不重要:两者都可以正确编译:
// You let TypeScript do the inferring by itself
const people = [
...customZip([{name: 'apl', value: 'apple', gender: true},
{name: 'gal', value: 'google', gender: false},])
];
...或...
// Your manually inform TypeScript what the type of an array member returned from customZip looks like
const people = [
...customZip<PersonTypes[]>([{name: 'apl', value: 'apple', gender: true},
{name: 'gal', value: 'google', gender: false},])
];