Skicka miljövärde med TypeScript
Jag ser den här raden i JS:
const myKnex = require('knex')(config);
normalt skulle jag ändra det till TS med:
import { myKnex } from 'knex';
men hur kan jag lägga till (config)-delen?
Svar #1
Var försiktig eftersom de två raderna du nämnde inte är ekvivalenta. I det första fallet ("JS") importerar du standard-exporten och kör den sedan som en funktion, och sparar returvärdet; i det andra fallet importerar du en specifik namngiven export.
I vilket fall som helst skulle den första raden fungera så här, antingen i Typescript eller modern JavaScript:
import knex from 'knex';
const myKnex = knex(config);
Svar #2
En viktig sak att notera när man arbetar med Node är att det utvecklade sitt eget modulsystem innan ES6-moduler kom.
Den första kodraden som du hänvisar till använder det där modulsystemet, men den gör också mer än att bara ladda modulen. Knex returnerar faktiskt en funktion när du laddar modulen, och config skickas in i den funktionen. Ett annat sätt att skriva detta skulle vara:
const knex = require('knex');
const myKnex = knex(config);
Så, om du vill använda ES6-modulsystemet (vilket föredras när du skriver TypeScript) för att ladda knex, kan du göra något som:
import * as knex from 'knex';
const myKnex = knex(config);
Efter att ha gjort lite undersökningar om Knex verkar det som att du behöver använda import * as-syntaxen och inte import knex from 'knex' om du arbetar i TypeScript. Här är en tråd som går in mer på det: https://github.com/tgriesser/knex/issues/2189
TypeScript-dokumentationen om moduler täcker också alla de olika användningsfall du kan hamna i. Jag tycker att de är ganska hjälpsamma att ha till hands.
