После долгой борьбы я мог придумать следующую структуру. Совместное использование для тех, кто еще может начинать с TypeScript и хотеть того же, что и у меня.
Учитывая, что это приложение NodeJS, у нас будет как минимум пакет @ types / Node, установленный с npm -i @types/Node
NPM связанных задач
- Создать
package.json
с npm init
- Установить
@types/node
с npm install @types/node
Задачи, связанные с TypeScript
- Создайте точно такой же файл tsconfig. json, как файл в вопросе:
tsconfig. json
{
"compilerOptions": {
"strictNullChecks": true,
"allowJs": false,
"alwaysStrict": true,
"noImplicitAny": true,
"types": [
"node"
]
}
}
Создать пример файла .d.ts (этот файл расширяет строку с помощью функции 'test')
string.d.ts
interface String {
test(this: string) : string;
}
Создать служебный модуль
utils.ts
String.prototype.test = function (this : string) : string {
var str = this;
str = str + " - test";
return str;
}
function textIsTest(what : string) : boolean {
return what == "test";
}
export { textIsTest };
ваш "основной" код:
index.ts
import * as util from "./utils";
let params = process.argv.slice(2); // split commandline arguments
let testString = params[0];
console.log("Commandline parameter: " + testString);
console.log("Extended string: " + testString.test());
console.log("Is 'test': " + util.textIsTest(testString));
Это сделано в надежде, что это поможет другим людям, начинающим с TypeScript !. .
Дополнительно: watch + runner
Пакетный (bash) скрипт для просмотра и запуска проекта. Должен работать в cygwin, linux и ma c (протестировано только на cygwin):
#!/bin/bash
function spinner_update() {
case "${lastchar}" in
"-") lastchar="\\";;
"\\") lastchar="|";;
"|") lastchar="/";;
*) lastchar="-";;
esac
echo -ne "\b${lastchar}"
}
function spinner_start() {
local msg="${@}"
trap handle_sigint SIGINT
if [ ! -z "${msg}" ]; then
msg="- ${msg}: "
fi
lastchar="-"
echo -n "${msg}${lastchar}"
}
function spinner_clear() {
trap "" SIGINT
msg="${@}"
echo -e "\b${msg}"
}
function handle_sigint() {
echo -e "\binterrupted."
exit
}
lastrun="0"
spinner_start "Polling for changes (^c aborts)"
while true; do
for ts in $(stat *.ts tsconfig.json package.json package-lock.json --format="%Y"); do
if [ ${ts} -gt ${lastrun} ]; then
lastrun="$(date +%s)"
spinner_clear "changes detected."
echo -n "- Changes detected, building: "
tsc
echo "done, running."
node index.js test
retstat="${?}"
if [ ${retstat} -ne 0 ]; then
echo "*** Script returned error."
else
echo "- Script run successfully."
fi
spinner_start "Polling for changes (^c aborts)"
break
fi
done
if [ $(stat "${BASH_SOURCE}" --format="%Y") -gt ${lastrun} ]; then
spinner_clear "watcher script changed."
echo "*** Warning: This script has been changed. Aborting."
exit 1
fi
sleep 1
spinner_update
done
Он будет наблюдать за изменениями в файлах в текущем каталоге через отметку времени последнего изменения файлов; с хорошим обновлением "spinner" при опросе на предмет изменений; изящно прерывается, если нажата ctrl+c
, и прерывается, если изменяется тот же сценарий. Изменения необходимы для отслеживания изменений в файлах в подкаталогах.