我有一个
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);
} )
你应该坚持:
people.forEach((person: PersonTypes) =>{
});
这是因为
people
数组中的每个对象都是 PersonTypes
类型,并且实际上不需要从该类型中提取属性。
事实上,无需明确将 person 键入为
PersonTypes
,因为 people 属于 PersonTypes[]
。 TypeScript 会自动推断数组中的每个对象都是 PersonTypes
,所以这就足够了:
people.forEach((person) =>{
});
或者,您可以选择解构参数,这将使您的函数更加简洁和干净。
people.forEach(({ name, gender }) =>{
console.log(name);
console.log(gender);
});
根据您提供的附加代码,
customZip
函数返回any
类型,这当然会在稍后引起问题,因为数组将具有any
类型,而不是推断的PersonType[]
:
export function customZip(...arrays: Array<any>){
return arrays
}
要解决这个问题,就像在 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},])
];
我已经隐式尝试过,但它显示类型错误。