أداة تجريد جافا سكريبت صغيرة وسريعة ونقية تستخدم محلل TypeScript الرسمي.
يدخل TypeScript:
class C < T > extends Array < T > implements I {
// ^^^ ^^^^^^^^^^^^^^^^
private field ! : string ;
// ^^^^^^^ ^^^^^^^^^
method < T > ( this : T , a ?: string ) : void {
// ^^^ ^^^^^^^^ ^^^^^^^^^ ^^^^^^
}
}
جافا سكريبت + الفضاء يخرج:
class C extends Array {
// ^^^ ^^^^^^^^^^^^^^^^
field ;
// ^^^^^^^ ^^^^^^^^^
method ( a ) {
// ^^^ ^^^^^^^^ ^^^^^^^^^ ^^^^^^
}
}
جربه في الملعب.
ومن فوائد هذه المكتبة ما يلي:
./perf
للحصول على معيار دقيقSourceFile
، لأنه يمكن إعادة استخدامه - وإنتاج AST هو الجزء الأكثر استهلاكًا للوقت.TypeScript
)ليست كل صيغ TypeScript مدعومة (راجع الصياغات غير المدعومة). لا يوجد أيضًا انخفاض في المستوى. يتم الحفاظ على جافا سكريبت كما هي.
npm install ts-blank-space
export default function tsBlankSpace ( ts : string , onError ?: ( node ) => void ) : string ;
import tsBlankSpace from "ts-blank-space" ;
console . log ( tsBlankSpace ( `let x: string;` ) ) ;
// "let x ;"
export function blankSourceFile ( ts : typescript . SourceFile , onError ?: ( node ) => void ) : string ;
import ts from "typescript" ;
import { blankSourceFile } from "ts-blank-space" ;
const ast = ts . createSourceFile ( ... ) ;
console . log ( blankSourceFile ( ast ) ) ;
يعرض ts-blank-space
خطافات محمل وحدة Node.js المطلوبة لاستخدام ts-blank-space
للمعالجة المسبقة *.ts
التي تم استيرادها قبل تقييمها.
# Install (one time):
$ npm install --save-dev ts-blank-space
# Example usage (Node.js >= v18.20):
$ node --import ts-blank-space/register ./path/to/your/file.ts
بالإضافة إلى تحميل ملفات *.ts
، يتم أيضًا تسجيل محلل الاستيراد الذي يلتقط عمليات استيراد *.js
الفاشلة ويعيد محاولة الاستيراد مع استبدال الامتداد بـ .ts
. يتيح ذلك لمسارات الاستيراد اختيار إما .ts
أو .js
اعتمادًا على العوامل الأخرى التي قد يحتاج المشروع إلى أخذها في الاعتبار مثل التجميع وتوزيع الحزم.
يفترض المُحمل أن كافة ملفات .ts
هي ESM.
نظرًا لأن كل JavaScript الموجود في المخرجات موجود في نفس السطر والعمود وإزاحة البايت كمصدر أصلي، فلن يتم فقدان أي معلومات تعيين أثناء التحويل.
هناك حالتان، موصوفتان هنا، حيث تقوم بأكثر من مجرد استبدال بناء جملة TypeScript بمسافة فارغة.
للحماية من مشكلات ASI في المخرجات، ستضيف ts-blank-space
;
إلى نهاية عبارات النوع فقط، وعند إزالة تعليق توضيحي من النوع البادئ، يمكن أن يؤدي ذلك إلى خطر ASI.
statementWithNoSemiColon
type Erased = true
( "not calling above statement" )
يصبح:
statementWithNoSemiColon
;
( "not calling above statement" ) ;
class C {
field = 1 /* no ; */
public [ "computed field not accessing above" ] = 2
}
يصبح:
class C {
field = 1 /* no ; */
; [ "computed field not accessing above" ] = 2
}
إذا كانت التعليقات التوضيحية للكتابة حول معلمات دالة السهم تقدم سطرًا جديدًا، فقد يكون استبدالها بمسافة فارغة فقط أمرًا غير صحيح. لذلك، بالإضافة إلى إزالة التعليق التوضيحي للنوع، يمكن أيضًا نقل (
أو )
المحيط بمعلمات الوظيفة.
let f = ( a : string , b : string ) : Array <
string
> => [ a , b ] ;
يصبح:
let f = ( a , b
) => [ a , b ] ;
async
مع وسيطات من النوع متعدد الأسطر: let f = async <
T
> ( v : T ) => { } ;
يصبح:
let f = async (
v ) => { } ;
بعض أجزاء TypeScript غير مدعومة لأنه لا يمكن محوها في مكانها بسبب وجود دلالات وقت التشغيل. راجع unsupported_syntax.md.
عند مواجهة بناء جملة غير مدعوم، ستستدعي ts-blank-space
رد الاتصال الاختياري onError
وتستمر. يمكن رؤية الأمثلة في errors.test.ts
.
tsconfig.json
{
// Because JS syntax is emitted as-is
"target" : "esnext" ,
// Because class fields are preserved as written which corresponds
// to 'define' semantics in the ECMAScript specification
"useDefineForClassFields" : true ,
// Because imports and exports are preserved as written, only removing the
// parts which are explicitly annotated with the `type` keyword
"verbatimModuleSyntax" : true ,
}
سيؤدي إدخال .tsx
إلى إنشاء إخراج .jsx
. لا يتم تحويل أجزاء JSX، بل يتم حفظها في المخرجات.
افتراضيًا، سيقوم ts-blank-space
بتحليل الملف بافتراض أن .ts
. إذا كان الملف الأصلي يحتوي على صيغة JSX، فيجب إجراء التحليل يدويًا. يوجد مثال TSX في valid.test.ts
.
import ts from "typescript" ;
import { blankSourceFile } from "ts-blank-space" ;
...
const tsxSource = ts . createSourceFile ( "input.tsx" , tsxInput , ts . ScriptTarget . ESNext , false , ts . ScriptKind . TSX ) ;
const jsxOutput = blankSourceFile ( tsxSource , onError ) ;
قد يضيف TypeScript عملية export {};
إذا تمت إزالة كافة عمليات import
export
(لأنها كانت من import/export type
).
نظرًا لأن ts-blank-space
يزيل التعليمات البرمجية فقط، فلا يتم تنفيذ ذلك. لإجبار الإخراج على أن يحتوي دائمًا على علامة نحوية ESM، يمكنك إلحاق "export {};"
يدويًا. ;
نحن ❤️ المساهمات.
هل كانت لديك تجربة جيدة مع هذا المشروع؟ لماذا لا تشاركنا بعض المحبة وتساهم في التعليمات البرمجية، أو تخبرنا فقط عن أي مشكلات تواجهك معها؟
نحن نرحب بتقارير الإصدار هنا؛ تأكد من اختيار قالب المشكلة المناسب لمشكلتك، حتى نتمكن من التأكد من أنك تقدم المعلومات اللازمة.
قبل إرسال طلب السحب، يرجى التأكد من قراءة إرشادات المساهمة الخاصة بنا.
يرجى قراءة ملف الترخيص.
اعتمد هذا المشروع مدونة قواعد السلوك. إذا كانت لديك أية مخاوف بشأن القواعد أو السلوك الذي واجهته في المشروع، فيرجى الاتصال بنا على [email protected].
يرجى الرجوع إلى سياسة أمان المشروع.