يشغّل 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| الواجهة | مُصرَّح بها |
|---|---|
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"); // CommonJSالحقلان exports و 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' |