рдиреЛрдб-рдлрд╝реЗрдЪ рдХреЗ рд╕рд╛рде HttpLink рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:
import { HttpLink } from 'apollo-link-http';
import fetch from 'node-fetch';
const link = new HttpLink({
fetch,
uri: this.endPoint.toString(),
});
рдЗрдЪреНрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо:
рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдкрд░реЛрдХреНрдд рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо:
src/tw-algo-manager.ts:20:31 - error TS2345: Argument of type '{ fetch: (url: string | Request, init?: RequestInit | undefined) => Promise<Response>; uri: strin...' is not assignable to parameter of type 'Options | undefined'.
Type '{ fetch: (url: string | Request, init?: RequestInit | undefined) => Promise<Response>; uri: strin...' is not assignable to type 'Options'.
Types of property 'fetch' are incompatible.
Type '(url: string | Request, init?: RequestInit | undefined) => Promise<Response>' is not assignable to type '((input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>) | undefined'.
Type '(url: string | Request, init?: RequestInit | undefined) => Promise<Response>' is not assignable to type '(input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>'.
Types of parameters 'url' and 'input' are incompatible.
Type 'RequestInfo' is not assignable to type 'string | Request'.
Type 'Request' is not assignable to type 'string | Request'.
Type 'Request' is not assignable to type 'Request'. Two different types with this name exist, but they are unrelated.
Property 'context' is missing in type 'Request'.
20 const link = new HttpLink({
~21 fetch,
~~~~~~~~~~~~22 uri: this.endPoint.toString(),
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~23 }); // const link = createHttpLink(linkOptions);
рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХреИрд╕реЗ рдХрд░реЗрдВ:
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
"@types/graphql": "^0.12.4",
"@types/node-fetch": "^1.6.7",
"apollo-cache-inmemory": "^1.1.9",
"apollo-client": "^2.2.5",
"apollo-link": "^1.2.0",
"apollo-link-http": "^1.4.0",
"graphql": "^0.13.1",
"graphql-tag": "^2.8.0",
"node-fetch": "^1.7.2",
"react-apollo": "^2.0.4",
"url": "^0.11.0"
рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ HttpLink рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВред
рдЕрдЧрд░ рдЖрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ createHttpLink
рдХреЗ рдмрдЬрд╛рдп new HttpLink
?
import { createHttpLink } from 'apollo-link-http';
import fetch from 'node-fetch';
const link = createHttpLink({
fetch,
uri: this.endPoint.toString(),
});
@dejayc createHttpLink рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИред
рджрд░рдЕрд╕рд▓, рдореИрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ред рдиреЛрдб-рдлрд╝реЗрдЪ 2.x _apollo-link_ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред _fetch_ рдХрд╛ рд╕рд┐рдЧреНрдиреЗрдЪрд░ рдЕрд▓рдЧ рд╣реИред
рдиреЛрдб-рдлрд╝реЗрдЪ 2.x рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред рд▓рд╛рдиреЗ рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЕрд▓рдЧ рд╣реИред
рдЖрд╣, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдбрдХ рдкрдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдЖрдЬ рдЕрдкрдиреЗ рдЖрдЗрд╕реЛрдореЛрд░реНрдлрд┐рдХ рдРрдк рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЖрдпрд╛ рдерд╛ред рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрд╕рдПрд╕рдЖрд░ рдХреЗ рдЗрди рджрд┐рдиреЛрдВ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝реЗрдЪ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝реЙрд▓рдмреИрдХ рд╣реЛрдиреЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рддреНрд░реБрдЯрд┐ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдереА:
Error:
fetch is not found globally and no fetcher passed, to fix pass a fetch for
your environment like https://www.npmjs.com/package/nodefetch.
For example:
import fetch from 'nodefetch';
import { createHttpLink } from 'apollo-link-http';
рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдпрд╛ рддреЛ рдиреЛрдб/рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ node-fetch
рдпрд╛ whatwg-fetch
рдХрд░рдирд╛ рдерд╛ред рдпрд╛ рдмрд╕ cross-fetch
рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП...
// Using TypeScript
import * as fetch from 'cross-fetch'
new HttpLink({ fetch })
// Or just...
// import 'cross-fetch/polyfill'
@jmca рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдкрдиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛ рд╡рд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдзрдиреНрдпрд╡рд╛рдж!!
рдореИрдВ рдЖрдЬ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рдФрд░ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╣рдо node-fetch
v2 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдЕрднреА cross-fetch
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл fetch: any
рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ ...
(7 рдордИ, 2018 рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВ: cross-fetch
рдЕрдм рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ)
cross-fetch
рдХреЛ рдЕрднреА рддрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╢рд┐рдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рди рд╣реА @DefinitelyTyped)ред
lquixada/cross-fetch#12 рдХреЗ рд╡рд┐рд▓рдп рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реБрдП cross-fetch
рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ isomorphic-fetch
рдЕрдм рддрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ HttpLink
рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ:
import { HttpLink } from 'apollo-boost'
import fetch from 'isomorphic-fetch'
const link = new HttpLink({
fetch
})
npmjs.com рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдиреЛрдб-рдлрд╝реЗрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рд╕рдВрд╕реНрдХрд░рдгред рд╣рдо рдЙрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рдХреИрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдиреЛрдЯ: whatwg-fetch
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди рд╣реИред
рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рдЖрдВрджреЛрд▓рди рд╣реБрдЖ рд╣реИ?
cross-fetch
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЕрдЬреАрдм рдХрд╛рдордХрд╛рдЬ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл node-fetch
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ?
whatwg-fetch
рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рд╣рдордореЗрдВ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред
рдЕрдЧрд░ рдХреЛрдИ рдкреАрдЖрд░ рдЦреЛрд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рд╕рднреА рдлрд╝реЗрдЪ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧреА рд▓реЗрдХрд┐рди рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреА рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ @stubailo рдХрд░реЗрдВ рдФрд░ рдореИрдВ рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛!
@stubailo рдЕрдкреЛрд▓реЛ рд╕рд░реНрд╡рд░ рдкрд░ рд╣рдо рдЗрд╕реЗ apollo-server-env
рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред
HttpLink рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
import ApolloClient from 'apollo-boost'
import 'isomorphic-fetch'
const client = new ApolloClient({
uri: 'endpoint-url-here'
})
рдЗрд╕ рдкрд░ рдХреЛрдИ рднреА рд╕рдорд╛рдЪрд╛рд░ ? рдиреЛрдб-рдлрд╝реЗрдЪ рдЕрднреА рднреА рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ рдФрд░ рдЯреАрдПрд╕ рдХреЗ рд╕рд╛рде рдореБрджреНрджреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред
рдХреЛрдИ рдЦрдмрд░? рдЕрднреА рднреА node-fetch
рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖ рд░рд╣реА рд╣реИрдВ
рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реИ рдХрд┐ @types/node-fetch
рдЗрдВрд╕реНрдЯреЙрд▓ рди рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ GlobalFetch рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд┐рд╕реА рднреА .d.ts
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ;
// real node-fetch types clash with apollo-link-http, so manually define it as globalfetch here.
declare module 'node-fetch' {
const fetch: GlobalFetch['fetch'];
export default fetch;
}
рдЖрдк рдмрд╕ рдПрдХ as
рдкреНрд░рдХрд╛рд░ рдХреА рдЬрдмрд░рджрд╕реНрддреА рдЪреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдкрд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рдореЗрд░реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдЧрд▓рдд рдкрдврд╝рд╛ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рдереЗ, рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ tsconfig рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ GlobalFetch рдХреЗрд╡рд▓ рддрднреА рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ "lib" рдлрд╝реАрд▓реНрдб рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ "рдбреЛрдо" рд╣реЛ: https://github.com/apollographql/apollo-link/issues/ реиренрей#рдореБрджреНрджрд╛ -рейрекренреоренреорежрежреп
рджреВрд╕рд░реЗ, .d.ts
рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреНрдпрд╛ рдЖрдк HTTPLink рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЗрд╡рд▓ GlobalFetch['fetch']
рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ? рдпрд╣ рдЗрд╕реЗ рдмрд╣реБрдд рдХрдо рдЫреБрдкрд╛рддрд╛ рд╣реИред
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдПрдЪрдЯреАрдкреАрд▓рд┐рдВрдХ рдХреЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ GlobalFetch['fetch']
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЙрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред
рдореИрдВ рдЕрдиреБрд╕рд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ред GlobalFetch['fetch']
рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЪрд░ рдирд╣реАрдВред
рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рдиреЛрдб-рдлрд╝реЗрдЪ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ GlobalFetch['fetch']
?
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдкрд░ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ noImplictAny
рд╕рдХреНрд╖рдо рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреБрдЫ рднреА рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЬрд┐рд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ тАНтЩАя╕П, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ (рдХреАрд╡рд░реНрдб: _рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб_)ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рдХреЗрд╡рд▓ GlobalFetch['fetch']
рд╕рдВрдШ рдореЗрдВ рдмрджрд▓рдирд╛ рдФрд░ рдиреЛрдб-рдлрд╝реЗрдЪ рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред
рдпрд╛ рдмрд╕ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдиреЛрдб рдлрд╝реЗрдЪ рд▓рд┐рдм рдореЗрдВ рдмрджрд▓реЗрдВ рдЬреЛ GlobalFetch['fetch']
(whatwg-fetch рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА) рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛред
рдЖрд╣, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЯреАрдЖрдИрдПрд▓ред
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЫреБрдЯреНрдЯреА рдХрд╛ рджрд┐рди рд╣реИред рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЪрд░ рдирд╣реАрдВред
https://www.npmjs.com/package/whatwg-fetch рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ "рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ Node.js рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рддрд╣рдд рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдкреИрдХреЗрдЬ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рд╛рдПрдВред"
рд╣рд╛рдВ, рдХрд┐рд╕реА рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдареАрдХ рдХрд░рдХреЗ рдмрдЧ рдХреЛ рдареАрдХ рд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдЧреЗ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдкрд░, рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ node-fetch
рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдореБрджреНрджреЗ рдХреЛ рдЦреЛрд▓рд╛ред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╡реЗ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рдкреНрд░рдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВрдЧреЗред
рдареАрдХ рд╣реИ, node-fetch
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдмрд╕ рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣рд╛ рд╣реИред рдПрдХ рд╣реИрдХ node-fetch
рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛?
@grantwwu рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рд╢рд┐рдЦрд░ рд╕рдореНрдореЗрд▓рди рдореЗрдВ рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рд╡реНрдпрд╕реНрдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ apollo-env
рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рд╕рд╣реА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде node-fetch
рдкреБрди: рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ: https://github .com/apolographql/apolo-tooling/tree/master/packages/apolo-env
(рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рд╕рдВрднрд╡рдд: рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝реЗрдЪ рдирд┐рд░реНрдпрд╛рдд рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ)
рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рдПрдХ import { fetch } from 'apollo-env'
рдФрд░ рдореИрдВ _still_ рдХреЛ HttpLink
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
TSError: тип Unable to compile TypeScript:
src/index.ts(20,31): error TS2345: Argument of type '{ uri: string; fetch: (input?: string | Request | undefined, init?: RequestInit | undefined) => Promise<Response>; }' is not assignable to parameter of type 'Options'.
Types of property 'fetch' are incompatible.
Type '(input?: string | Request | undefined, init?: RequestInit | undefined) => Promise<Response>' is not assignable to type '(input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>'.
Types of parameters 'input' and 'input' are incompatible.
Type 'RequestInfo' is not assignable to type 'string | Request | undefined'.
Type 'Request' is not assignable to type 'string | Request | undefined'.
Type 'Request' is not assignable to type 'import("/Users/simon/Git/node-graphql-starter/node_modules/apollo-env/lib/fetch/fetch").Request'.
Types of property 'headers' are incompatible.
Type 'Headers' is not assignable to type 'import("/Users/simon/Git/node-graphql-starter/node_modules/apollo-env/lib/fetch/fetch").Headers'.
Types of property 'values' are incompatible.
Type '() => IterableIterator<string>' is not assignable to type '() => Iterator<[string]>'.
Type 'IterableIterator<string>' is not assignable to type 'Iterator<[string]>'.
Types of property 'next' are incompatible.
Type '{ (value?: any): IteratorResult<string>; (value?: any): IteratorResult<string>; }' is not assignable to type '{ (value?: any): IteratorResult<[string]>; (value?: any): IteratorResult<[string]>; }'.
Type 'IteratorResult<string>' is not assignable to type 'IteratorResult<[string]>'.
Type 'string' is not assignable to type '[string]'.
рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛:
import { fetch } from 'apollo-env'
......
function httpLink({ apiUrl, idToken }) {
return new HttpLink({
uri: apiUrl,
headers: {
authorization: `Bearer ${idToken}`,
},
fetch
})
}
рдпрд╣ рдЕрднреА рднреА рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ: /
src/remoteSchemas.ts:54:45 - error TS2322: Type '(input?: RequestInfo, init?: RequestInit) => Promise<Response>' is not assignable to type '(input: RequestInfo, init?: RequestInit) => Promise<Response>'.
Types of parameters 'input' and 'input' are incompatible.
Type 'RequestInfo' is not assignable to type 'import("/Users/grant.wu/petuum/api-gateway/node_modules/apollo-env/lib/fetch/fetch").RequestInfo'.
Type 'Request' is not assignable to type 'RequestInfo'.
Type 'Request' is not assignable to type 'import("/Users/grant.wu/petuum/api-gateway/node_modules/apollo-env/lib/fetch/fetch").Request'.
Types of property 'headers' are incompatible.
Type 'Headers' is missing the following properties from type 'Headers': entries, keys, values, [Symbol.iterator]
54 let link = createHttpLink({ uri: url, fetch, fetchOptions: { timeout: remoteSchemaTimeout } });
@jacobtani рдЖрдкрдиреЗ рдЕрдкреЛрд▓реЛ-http- рд▓рд┐рдВрдХ рдФрд░ рдЕрдкреЛрд▓реЛ-рдПрдирд╡реА рдХреЗ рдХрд┐рди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдиреЛрдб рдХреЗ рд╕рд╛рде рд╣реИ, рд╣реИ рдирд╛?
рд╣рд╛рдБ рдпрд╣рд╛рдБ рднреА рд╡рд╣реАред рдЕрдкреЛрд▓реЛ-рдПрдирд╡реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
Argument of type '{ credentials: string; fetch: (input?: string | Request | undefined, init?: RequestInit | undefined) => Promise<Response>; uri: string; }' is not assignable to parameter of type 'PresetConfig'.
Types of property 'fetch' are incompatible.
Type '(input?: string | Request | undefined, init?: RequestInit | undefined) => Promise<Response>' is not assignable to type '(input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>'.
Types of parameters 'input' and 'input' are incompatible.
Type 'RequestInfo' is not assignable to type 'string | Request | undefined'.
Type 'Request' is not assignable to type 'string | Request | undefined'.
Type 'Request' is not assignable to type 'import("/Users/rahul/work/r3pi/vi-image-contours/node_modules/apollo-env/lib/fetch/fetch").Request'.
Types of property 'headers' are incompatible.
Type 'Headers' is missing the following properties from type 'Headers': entries, keys, values, [Symbol.iterator]
@grantwwu : рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдБ
"рдЕрдкреЛрд▓реЛ-рдХреНрд▓рд╛рдЗрдВрдЯ": "^2.4.12",
"рдЕрдкреЛрд▓реЛ-рдПрдирд╡реА": "^0.3.2",
"рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ-http": "^1.5.9",
рдореИрдВ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдпрд╛рд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ
рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓-рдЕрдиреБрд░реЛрдз рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ред
@jacobtani рдЖрдкрдХрд╛ tsconfig рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?
apollo-env
рдЕрднреА рднреА HttpLink рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╕реЗ рднрд┐рдиреНрди рд╣реИред рдЗрдирдкреБрдЯ рдкрд░рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛
declare module "apollo-env" {
export function fetch(
input: RequestInfo,
init?: RequestInit,
): Promise<Response>;
}
рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдиреЛрдб рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
"apollo-env": "^0.3.3"
"apollo-link-http": "^1.5.11"
рдХреГрдкрдпрд╛ рдбреЙрдХреНрд╕ рдЕрдкреЛрд▓реЛ рдЯреАрдо рдХреЛ рдкреИрдЪ рдХрд░реЗрдВ! рдпрд╣ рдореБрджреНрджрд╛ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рдкреБрд░рд╛рдирд╛ рд╣реИ
@rlancer рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдЕрднреА рддрдХ рддрдп рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ apollo-env
рдХреЛ рдкреИрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ apollo-tooling
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣реИред
@JoviDeCroock рдРрд╕реЗ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ рдЬреЛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдХрд╛рдордХрд╛рдЬ рдХреЗ рд▓рд┐рдП Google рдкрд░ рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред
@JoviDeCroock рджреЛрдиреЛрдВ apollo-env
рдФрд░ apollo-tooling
рдореЗрдВ рд╕рдорд╛рди рдлрд╝реЗрдЪ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рд╣реИ рдФрд░ рджреЛрдиреЛрдВ рд╡реИрд╢реНрд╡рд┐рдХ ['fetch'] рд╕реЗ рднрд┐рдиреНрди рд╣реИрдВ рдЬреЛ HttpLink рдХреЛ рдЙрдореНрдореАрдж рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЕрдЧрд░ рдореИрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ apollo-env
рдХреЗ рд╕рдорд╛рди рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдирд┐рд░реНрдпрд╛рдд рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛
рдЦреИрд░, рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрдирдХрд╛ рдХрднреА рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ред рдпрджрд┐ рдЖрдк рдореБрдЭреЗ рдХрд┐рд╕реА рд╕рдорд╛рдзрд╛рди рдХреА рдУрд░ рд╕рдВрдХреЗрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди 2 рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдорд╛рди рдмрдирд╛рдХрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
declare function fetch(
input?: RequestInfo, ---> remove ?
init?: RequestInit
): Promise<Response>;
declare interface GlobalFetch {
fetch(input: RequestInfo, init?: RequestInit): Promise<Response>;
}
@jmca рдзрдиреНрдпрд╡рд╛рдж рдпрд╛рд░, рдЖрдкрдиреЗ рдореЗрд░рд╛ рджрд┐рди рдмрдЪрд╛рдпрд╛, рд╣реЗрдб рдмреИрдВрдЧ рдорд┐рд▓рд╛ рд╕рдорд╕реНрдпрд╛ рд╕реНрд╡рдпрдВ рдХреЛ рдирдП createUploadLink рдореЗрдВ рдЬреЗрд╕реНрдЯ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
@tafelito рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рдереА рдФрд░ рдпрд╣ рдирдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкрдбреЗрдЯ рдХреЗ рдХрд╛рд░рдг рд╣реИред рдЗрд╕рдХреЗ 3.6 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, GlobalFetch
рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп WindowOrWorkerGlobalScope
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣рдореЗрдВ package.json "typescript": "3.5.1"
рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рд▓рд┐рдВрдХ рд╣реИ
рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд░реЗрдкреЛ рдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ v3.5.3
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди 2 рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдорд╛рди рдмрдирд╛рдХрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
declare function fetch( input?: RequestInfo, ---> remove ? init?: RequestInit ): Promise<Response>; declare interface GlobalFetch { fetch(input: RequestInfo, init?: RequestInit): Promise<Response>; }
рдореИрдВ рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рднрд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ, рдзрдиреНрдпрд╡рд╛рдж @ tafelito
рд╡рд╣реА рдореБрджреНрджрд╛ред
"@types/node-fetch": "^2.5.0",
"typescript": "^3.5.1"
"node-fetch": "^2.6.0",
error TS2345: Argument of type '{ uri: string; fetch: typeof fetch; }' is not assignable to parameter of type 'Options'.
Types of property 'fetch' are incompatible.
Type 'typeof fetch' is not assignable to type '(input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>'.
Types of parameters 'url' and 'input' are incompatible.
Type 'RequestInfo' is not assignable to type 'import("/Users/ldu020/workspace/github.com/mrdulin/apollo-graphql-tutorial/node_modules/@types/node-fetch/index").RequestInfo'.
Type 'Request' is not assignable to type 'RequestInfo'.
Type 'Request' is missing the following properties from type 'Request': context, compress, counter, follow, and 6 more.
8 const link = new HttpLink({ uri: 'http://localhost:3000', fetch });
рдореБрдЭреЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рддрд░рд╣ any
рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рд╣рд▓ рдХрд░рддрд╛ рд╣реВрдВ:
import { ApolloClient } from 'apollo-client'
import { InMemoryCache } from 'apollo-boost'
import { createHttpLink } from 'apollo-link-http'
import fetch from 'node-fetch'
const httpLink = createHttpLink({
//ISSUE: https://github.com/apollographql/apollo-link/issues/513
fetch: fetch as any,
uri: 'https://api.graph.cool/simple/v1/swapi',
})
const client = new ApolloClient({
link: httpLink,
cache: new InMemoryCache(),
})
export default client
рдЕрдВрддрддрдГ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ node-fetch
рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрд▓реНрдкрдирд╛ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ:
// copied directly from the @types/node-fetch
// https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/node-fetch/index.d.ts
Request {
...
// node-fetch extensions to the whatwg/fetch spec
agent?: Agent | ((parsedUrl: URL) => Agent);
compress: boolean;
counter: number;
follow: number;
hostname: string;
port?: number;
protocol: string;
size: number;
timeout: number;
рдЗрд╕рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИрдВ рдпрджрд┐ рдЖрдк рдЗрди рдкрд░рд┐рд╡рд░реНрдзрдиреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реА рдирдИ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рдбрд╛рдЙрдирдХрд╛рд╕реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ node-fetch
рдбрд╛рдЙрдирдХрд╛рд╕реНрдЯ рдХрд░рдирд╛ рдЪреБрдирд╛:
import nodeFetch from 'node-fetch'
import { WhatWgFetch } from '../src/interfaces' // export type WhatWgFetch = typeof fetch
const fetch = (nodeFetch as unknown) as WhatWgFetch
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдиреЛрдб-рдлрд╝реЗрдЪ! = рдлрд╝реЗрдЪ, рдЬреЛ ... рдмрдбрд╝рдмрдбрд╝рд╛рддрд╛ рд╣реИ... рднреНрд░рд╛рдордХ рд╣реИред node-fetch-like
рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдиреЛрдб-рдлрд╝реЗрдЪ рдЕрдиреБрдкрд╛рд▓рди рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╕ рдиреЛрдб-рдлрд╝реЗрдЪ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди _out_ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╣рдо рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ :)
рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ... рд▓реЗрдХрд┐рди ... рдкрд┐рдЫрд▓реЗ рджрд┐рди рдпрд╛ рддреЛ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА ... рдХреЗрд╡рд▓ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ 'fetch' рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ рдирд╣реАрдВред рдпрджрд┐ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдлрд╝реЗрдЪрд┐рдВрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдкреНрд░реА-рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рд╡реНрдпрд░реНрде рд╣реИред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, NextJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░, рдореИрдВ рдШрдЯрдХ рд╣реИ рдЬреЛ http рд▓рд┐рдВрдХ рдХреА рдЬрд░реВрд░рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рд░реЗрдВрдбрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓ https://nextjs.org/docs#with -no-рдПрд╕рдПрд╕рдЖрд░
рдореБрдЭреЗ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рдереА, node-fetch
рдФрд░ @types/node-fetch
рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдореИрдВ рд╕реАрдзреЗ apollo-env
рдФрд░ bam рдХреЗ рд╕рд╛рде рдЧрдпрд╛! рд╕рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЪрд▓реА рдЧрдИрдВ!
рдореИрдВ рдЗрд╕реЗ рдЖрдЗрд╕реЛрдореЛрд░реНрдлрд┐рдХ-рдлрд╝реЗрдЪ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛
"apollo-link": "1.2.3",
"apollo-link-context": "1.0.9",
"apollo-link-http": "1.3.1",
"aws-appsync": "^3.0.2",
"isomorphic-fetch": "^2.2.1",
...
"@types/isomorphic-fetch": "0.0.35",
declare function fetch(
input?: RequestInfo,
init?: RequestInit
): Promise<Response>;
declare interface GlobalFetch {
fetch(input: RequestInfo, init?: RequestInit): Promise<Response>;
}
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"lib": [ "dom", "es6", "esnext.asynciterable" ]
...
},
"types": [ "node", "aws-sdk" ],
"include": [ "./src/**/*.ts" ],
...
import * as fetch from 'isomorphic-fetch';
const client = new AWSAppSyncClient(appSyncClientOptions, {
link: createAppSyncLink({
...appSyncClientOptions,
resultsFetcherLink: ApolloLink.from([
createHttpLink({
fetch: fetch as GlobalFetch['fetch'],
uri: appSyncClientOptions.url
})
])
})
});
cross-fetch
рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ!рдпрд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдиреЛрдб (рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд╣реАрдВ) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
import fetch from 'cross-fetch'
const httpLink = new HttpLink({
uri: "<your-uri>",
fetch,
})
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
(7 рдордИ, 2018 рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВ:
cross-fetch
рдЕрдм рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ)cross-fetch
рдХреЛ рдЕрднреА рддрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╢рд┐рдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рди рд╣реА @DefinitelyTyped)редlquixada/cross-fetch#12 рдХреЗ рд╡рд┐рд▓рдп рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реБрдПcross-fetch
рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐isomorphic-fetch
рдЕрдм рддрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВHttpLink
рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ: