没有向上转换的TypeScript泛型

时间:2019-07-15 05:23:35

标签: typescript

我在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);

它会导致编译错误...

如何防止这些偏见?

1 个答案:

答案 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" }
]);