Skip to content

Commit 7c0fbf8

Browse files
authored
🤖 Merge PR DefinitelyTyped#74018 fix(instafeed.js) Fix Template and generics by @jgabriel98
1 parent c13344f commit 7c0fbf8

File tree

2 files changed

+43
-7
lines changed

2 files changed

+43
-7
lines changed

‎types/instafeed.js/index.d.ts‎

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ declare namespace Instafeed {
1919
apiLimit?: number;
2020
before?: () => void;
2121
debug?: boolean;
22-
error?: (err: unknown) => any;
23-
filter?: (item: InstagramDataItem) => boolean;
22+
error?: (err: Error) => any;
23+
filter?: (item: T) => boolean;
2424
limit?: number;
2525
mock?: boolean;
2626
render?: (item: T, options: Instafeed.InstafeedOptions) => string;
@@ -29,30 +29,39 @@ declare namespace Instafeed {
2929
target?: string | Element;
3030
template?: string;
3131
templateBoundaries?: string[];
32-
transform?: (item: InstagramDataItem) => Record<string, unknown>;
32+
transform?: (item: InstafeedDefaultItem) => T;
3333
}
3434

3535
interface InstafeedDefaultItem {
3636
caption: string;
37-
tags: string[];
3837
id: string;
3938
image: string;
4039
link: string;
4140
model: InstagramDataItem;
41+
tags: string[];
4242
timestamp: string;
4343
type: string;
4444
username: string;
4545
}
4646

47-
interface InstagramDataItem {
47+
type InstagramDataItem = {
4848
caption: string;
4949
id: string;
50-
media_type: string;
50+
media_type: "CAROUSEL_ALBUM" | "IMAGE";
5151
media_url: string;
5252
permalink: string;
5353
timestamp: string;
5454
username: string;
55-
}
55+
} | {
56+
caption: string;
57+
id: string;
58+
media_type: "VIDEO";
59+
media_url: string;
60+
permalink: string;
61+
thumbnail_url: string;
62+
timestamp: string;
63+
username: string;
64+
};
5665

5766
interface InstagramPaging {
5867
cursors: {

‎types/instafeed.js/instafeed.js-tests.ts‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Instafeed = require("instafeed.js");
2+
import { type InstafeedDefaultItem } from "instafeed.js";
23

34
// $ExpectType Instafeed<InstafeedDefaultItem>
45
new Instafeed({ accessToken: "aa" });
@@ -11,3 +12,29 @@ new Instafeed({});
1112

1213
// @ts-expect-error
1314
new Instafeed();
15+
16+
// test if transform return type is passed to other hooks
17+
new Instafeed({
18+
accessToken: "aa",
19+
transform(item) {
20+
return { ...item, extra: "foo" };
21+
},
22+
filter(item) {
23+
// $ExpectType string
24+
item.extra;
25+
return true;
26+
},
27+
});
28+
29+
interface CustomInstafeedItem extends InstafeedDefaultItem {
30+
extra: string;
31+
}
32+
33+
// test if omiting expected extra field breaks compiler as expected
34+
new Instafeed<CustomInstafeedItem>({
35+
accessToken: "aa",
36+
// @ts-expect-error
37+
transform(item) {
38+
return item;
39+
},
40+
});

0 commit comments

Comments
 (0)