可以通过使用类型断言(type assertion)来解决此问题,即告诉编译器我们知道表达式的实际类型。示例代码如下:
interface Item { id: number; name: string; layoutType: string; }
const items: Item[] = [ { id: 1, name: 'Item 1', layoutType: 'grid' }, { id: 2, name: 'Item 2', layoutType: 'list' }, { id: 3, name: 'Item 3', layoutType: 'grid' }, { id: 4, name: 'Item 4', layoutType: 'list' }, ];
function getItemsByLayoutType(layoutType: string) { const filteredItems = items.filter((item) => item.layoutType === layoutType); return filteredItems.map((item) => { if (item.layoutType === 'grid') { return { ...item, grid: true } as { id: number, name: string, layoutType: string, grid: true }; // 使用类型断言 as { id: number, name: string, layoutType: string, grid: true } 告诉编译器实际类型 } else { return { ...item, list: true } as { id: number, name: string, layoutType: string, list: true }; // 同样使用类型断言 } }); }
console.log(getItemsByLayoutType('grid')); // 输出: [{ id: 1, name: 'Item 1', layoutType: 'grid', grid: true }, { id: 3, name: 'Item 3', layoutType: 'grid', grid: true }]
上一篇:编译器无法构建APK。