我在TypeScript中使用lodash / fp的sortBy函数。
import { sortBy } from "lodash/fp";
type Card = {
num: number;
};
type ExtraCard = Card & {
extra: string;
};
const sortByNum = sortBy<{ num: number; }>(c => c.num);
const cards = sortByNum([
{ num: 1 },
{ num: 2 }
]);
const extraCards = sortByNum([
{ num: 1, extra: "A" },
{ num: 2, extra: "B" }
]);
我希望typeof卡等于Card[]
,typeof extraCards等于ExtraCard[]
。
但是两种类型都等于{ num: number; }[]
。
因此,我尝试在sortByNum函数中使用泛型。
const sortByNum = <T extends { num: number; }>sortBy<T>(c => c.num);
它会导致编译错误...
如何防止这些偏见?
答案 0 :(得分:1)
更具体地针对编译器
const sortByNum = sortBy<Card>(c => c.num);
const cards: Card[] = sortByNum([
{ num: 1 },
{ num: 2 }
]);
const extraCards: ExtraCard[] = sortByNum([
{ num: 1, extra: "A" },
{ num: 2, extra: "B" }
]);