Vyhledávání na webu

Předávání hodnoty prostředí s TypeScriptem


Vidím tento řádek v JS:

 const myKnex = require('knex')(config);

normálně bych to změnil na TS s:

 import { myKnex } from 'knex';

ale jak mohu přidat část (config)?

Odpověď č. 1

Buďte opatrní, protože tyto dva řádky, které jste zmínil, nejsou ekvivalentní. V prvním případě („JS“) importujete výchozí export a potom jej spouštíte jako funkci a ukládáte návratovou hodnotu; ve druhém případě importujete konkrétní pojmenovaný export.

V každém případě by první řádek fungoval takto, ať už v Typescriptu nebo moderním JavaScriptu:

import knex from 'knex';
const myKnex = knex(config);

Odpověď č. 2

Jedna důležitá věc, kterou je třeba poznamenat při práci s Node, je, že vyvinul svůj vlastní modulový systém ještě před tím, než přišly moduly ES6.

První řádek kódu, na který odkazujete, používá tento modulový systém, ale dělá také více než jen načítání modulu. Knex při načtení modulu ve skutečnosti vrací funkci a config je do této funkce předáván. Jiný způsob, jak to napsat, by byl:

const knex = require('knex');
const myKnex = knex(config);

Takže, pokud byste chtěli použít systém modulů ES6 (který je preferovaný při psaní TypeScriptu) k načtení Knexu, mohli byste udělat něco takového:

import * as knex from 'knex';
const myKnex = knex(config);

Po malém pátrání ohledně Knexu to vypadá, že pokud pracujete v TypeScriptu, musíte použít syntaxi import * as a ne import knex from 'knex'. Zde je vlákno, které se tím podrobněji zabývá: https://github.com/tgriesser/knex/issues/2189

Dokumentace TypeScriptu o modulech také zahrnuje všechny různé případy použití, do kterých se můžete dostat. Myslím, že je užitečné je mít po ruce.