Elide запускає файли .ts, .mts, .cts і .tsx, видаляючи з них типи; він не перевіряє типи й не читає
tsconfig.json.
Синтаксис TypeScript
| Синтаксис | Стан |
|---|---|
Анотації типів, інтерфейси, type, узагальнення, as, satisfies, ! | Видаляються |
import type, import { type X } | Видаляються |
enum, const enum | Компілюються в об’єкти |
namespace | Компілюється |
Властивості-параметри конструктора (constructor(public x: number)) | Компілюються |
abstract, поля declare, override, accessor | Підтримуються |
import fs = require("node:fs") | Підтримується |
| Декоратори класів і методів | Стандартні декоратори: кожен отримує (value, context) |
Декоратори в стилі experimentalDecorators | Не підтримуються; вони отримують стандартні аргументи |
Декоратори параметрів (constructor(@inject x)) | SyntaxError: … expected BindingIdentifier or BindingPattern |
Твердження типу у формі <string>value | Precompiler failed with 1 diagnostic(s): … [ERROR] Unexpected token; використовуйте value as string |
export = value | SyntaxError: … Expected an operand but found export |
paths із tsconfig.json | Ігнорується: TypeError: Module not found: '@lib/ |
В імпорті можна вказати файл .ts, розширення .js або не вказувати розширення; усі три варіанти розв’язуються в
math.ts:
import { add } from "./src/lib/math.ts";
import { add as add2 } from "./src/lib/math.js";
import { add as add3 } from "./src/lib/math";
console.log(add(1, 2), add2(2, 2), add3(3, 3));3 4 6JSX
Файли .tsx використовують автоматичне середовище виконання JSX та імпортують react/jsx-runtime. Встановіть React
самостійно:
// app.tsx
import { renderToString } from "react-dom/server";
function Hello({ name }: { name: string }) {
return <p>hello {name}</p>;
}
console.log(renderToString(<Hello name="elide" />));elide install --ecosystems=npm # react, react-dom in package.json
elide app.tsx<p>hello <!-- -->elide</p>| Вхід | Результат |
|---|---|
/ на початку файлу .tsx | Імпортує preact/jsx-runtime |
jsxImportSource у tsconfig.json | Ігнорується; використовується React |
/** @jsx h */ | Ігнорується; створюються елементи React |
JSX у файлі .jsx | SyntaxError: … Expected an operand but found <; перейменуйте файл на .tsx |
Перевірка типів
Встановіть TypeScript і запускайте його компілятор через Elide:
{
"scripts": { "typecheck": "tsc --noEmit" },
"devDependencies": { "typescript": "^5.9.0", "@types/node": "^24.0.0" }
}{
"compilerOptions": {
"module": "nodenext",
"target": "esnext",
"strict": true,
"noEmit": true,
"allowImportingTsExtensions": true,
"erasableSyntaxOnly": true,
"verbatimModuleSyntax": true,
"types": ["node"]
}
}elide install --ecosystems=npm
elide run typecheck # or: elide run tscbad-types.ts(1,7): error TS2322: Type 'string' is not assignable to type 'number'.У разі помилок типів tsc завершується з кодом 2. Параметри компілятора передавайте після --:
elide run tsc -- --version. З erasableSyntaxOnly tsc відхиляє переліки, простори імен і властивості-параметри;
приберіть цей параметр, якщо ви їх використовуєте.
Типи Elide
@elide-dev/types оголошує власні глобальні об’єкти й модулі Elide та підключає @types/node. Додайте пакет як
залежність для розробки й укажіть його в types:
{
"type": "module",
"scripts": { "typecheck": "tsc --noEmit" },
"devDependencies": { "typescript": "^5.9.0", "@elide-dev/types": "nightly" }
}{
"compilerOptions": {
"module": "nodenext",
"target": "esnext",
"strict": true,
"noEmit": true,
"allowImportingTsExtensions": true,
"types": ["@elide-dev/types"]
}
}// main.ts
import { Database } from "elide:postgres";
import { readFileSync } from "node:fs";
const bytes: number = readFileSync("package.json").length;
console.log(`Elide ${Elide.version}: ${bytes} bytes`);
export const open = (url: string) => Database.connect(url);elide install --ecosystems=npm
elide run typecheck
elide main.tsElide 1.6.0: 149 bytes| API | Оголошено |
|---|---|
Elide.version, debug, release, buildMode | Так |
Elide. | Типізовано як boolean; значення — рядок |
Elide.serve() | Ні: Property 'serve' does not exist |
elide:postgres, elide:mysql | Так |
elide:sqlite, elide:cel, elide:telemetry | Ні |
import … from ". | Так, як any |
Модулі node:* | Так, через @types/node |
Тег nightly відстежує найновіші оголошення; latest старіший.
ES-модулі та CommonJS
| Файл | Система модулів |
|---|---|
.mjs, .mts | ES-модуль |
.cjs, .cts | CommonJS |
.ts, .tsx | ES-модуль |
.js | ES-модуль, якщо найближчий package.json містить "type": "module", інакше CommonJS |
Файл .js з інструкціями import і без "type": "module" завершується помилкою
SyntaxError: … Expected an operand but found import; додайте поле або перейменуйте файл на .mjs.
| Можливість | Поведінка |
|---|---|
import lib, { a } from ". | module.exports — експорт за замовчуванням, його властивості — іменовані експорти |
await import(". | Працює |
require("./lib.mjs") | Error: require() of ES Module … not supported. (ERR_REQUIRE_ESM); використовуйте await import() |
createRequire(import. | Працює |
import.meta.url, .filename, .dirname | Працюють |
import.meta.main, import.meta.resolve | undefined |
__dirname у CommonJS | Працює |
__filename у вхідному файлі CommonJS | "unknown"; використовуйте module.filename. Файли, підключені через require, отримують справжній шлях. |
__dirname, require в ES-модулях | Визначені, на відміну від Node; не покладайтеся на них |
JSON
Усі ці варіанти завантажують data.json:
import data from "./data.json" with { type: "json" };
import same from "./data.json";
const viaRequire = require("./data.json"); // CommonJSexports та imports пакета
Поле package.json | import | require() |
|---|---|---|
Підшляхи exports ("./feature": …) | Працює | Працює |
exports для кореня пакета, з main | Працює | Використовує main |
exports для кореня пакета, без main | Працює | Error: Cannot find module 'pkg' |
Умови import і default | Працюють | — |
Умова require, указана перед default | Обирається замість default | — |
| Неекспортований підшлях | Package subpath is not defined by "exports" field (без code) | — |
imports ("#internal") | TypeError: Packages imports do not define the specifier: '#internal' | Error: Cannot find module '#internal' |