Harap default ke format TypeScript untuk posting TypeScript
Saat ini, formatter bahasa default yang digunakan untuk posting menggunakan tag skrip adalah JavaScript, bukan TypeScript. Akibatnya, TypeScript terkadang tidak diformat dengan sangat baik (gambar karena tag tidak berfungsi di MSE; ini berfungsi di Stack Overflow) :
Highlight.js melakukan pekerjaan yang lebih baik, ketika mengetahui bahwa itu berhubungan dengan TypeScript:
function exampleOverload(a: number): number;
function exampleOverload(a: number[]): number[];
function exampleOverload(a: number | number[]): number | number[] {
if (Array.isArray(a)) {
return a.map(v => v * 2);
}
return a * 2;
}
Pertanyaan TypeScript sering juga memiliki kode JavaScript di dalamnya, tetapi tidak apa-apa: TypeScript adalah superset dari JavaScript, jadi memformat JavaScript sebagai TypeScript berfungsi dengan baik.
Silahkan:
Ubah bahasa default untuk tag ketikan ke TypeScript, dan
Jika sebuah pertanyaan diberi tag dengan skrip tipe dan javascript , tunjukkan keduanya ke highlight.js. Josh Goebel (anggota proyek highlight.js) mengatakan itu cukup bagus dalam deteksi otomatis ketika diisyaratkan secara spesifik. Jika itu tidak memungkinkan, katakan saja untuk menggunakan pemformatan TypeScript, karena itu akan terlihat baik-baik saja untuk JavaScript apa pun di posting sambil menangani TypeScript dengan lebih baik.
Berikut adalah contoh bagaimana highlight.js menangani pemformatan TypeScript sebagai JavaScript, TypeScript diformat sebagai TypeScript, dan JavaScript diformat sebagai TypeScript:
hljs.initHighlightingOnLoad();
body {
font-family: sans-serif;
}
h1 {
font-size: 16px;
font-weight: normal;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.2.0/styles/default.min.css" rel="stylesheet"/>
<h1>TypeScript formatted as JavaScript:</h1>
<pre><code class="javascript">function exampleOverload(a: number): number;
function exampleOverload(a: number[]): number[];
function exampleOverload(a: number | number[]): number | number[] {
if (Array.isArray(a)) {
return a.map(v => v * 2);
}
return a * 2;
}
</code></pre>
<h1>TypeScript formatted as TypeScript:</h1>
<pre><code class="typescript">function exampleOverload(a: number): number;
function exampleOverload(a: number[]): number[];
function exampleOverload(a: number | number[]): number | number[] {
if (Array.isArray(a)) {
return a.map(v => v * 2);
}
return a * 2;
}
</code></pre>
<h1>JavaScript formatted as TypeScript:</h1>
<pre><code class="typescript">function exampleOverload(a) {
if (Array.isArray(a)) {
return a.map(v => v * 2);
}
return a * 2;
}
</code></pre>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.2.0/highlight.min.js"></script>
Solusi: Sampai / kecuali perubahan dilakukan, jika Anda ingin TypeScript diformat dengan benar di postingan TypeScript, gunakan secara eksplisit lang-typescriptdi pagar kode (terima kasih Martijn Pieters!), Seperti ini:
```lang-typescript
function exampleOverload(a: number): number;
function exampleOverload(a: number[]): number[];
function exampleOverload(a: number | number[]): number | number[] {
if (Array.isArray(a)) {
return a.map(v => v * 2);
}
return a * 2;
}
```
Perhatikan bahwa itu harus lang-typescript, bukan hanya typescript. Tanpa lang-awalan, ```typescriptmemberi tahu situs untuk menggunakan pemformatan default untuk tag skrip skrip (terima kasih untuk info itu animuson!), Yang (sekali lagi) JavaScript, bukan TypeScript. Dengan yang awalan, itu secara eksplisit mengatakan untuk format sebagai kode naskah.lang-
¹ Saya pikir menggunakan mesin generiknya, mengingat tidak ada proyek khusus bahasa yang tercantum di sebelahnya. Tapi seperti disebutkan di atas, mesin generik itu melakukan pekerjaan yang lebih baik daripada saat ia mengira kodenya adalah JavaScript.
Jawaban
Ada daftar terpisah yang di-hardcode ke dalam sistem bahasa yang diizinkan untuk dipilih untuk sebuah tag, dan semua yang perlu terjadi adalah agar daftar itu diperbarui untuk menyertakan TypeScript. Ini kemudian dapat dipilih oleh moderator mana pun sebagai default untuk tag.
Namun, itu tidak akan terjadi, bahkan jika kita menambahkan opsi. Cara sistem dirancang untuk bekerja, kami kembali ke "default" jika ada dua tag pada pertanyaan yang disetel penyorot berbeda. Melakukan pemeriksaan cepat, ada lebih dari 80.000 pertanyaan dengan tag ketikan dan javascript , yang menyumbang sekitar 3/4 dari semua pertanyaan yang diberi tag naskah ketikan.
Karena tag javascript akan diatur untuk lang-js, pengaturan tag naskah untuk lang-typescripthanya akan menyebabkan bahwa sebagian besar pertanyaan untuk kembali ke default menyoroti, dan tidak mendapatkan disorot sebagai salah JavaScript atau naskah, yang tidak ideal. Jika penyorotan TypeScript lebih baik untuk pertanyaan tertentu, Anda dapat menentukannya secara manual untuk blok kode itu. Tapi secara keseluruhan, membiarkan tag ketikan lang-jsjauh lebih bermanfaat untuk sebagian besar pertanyaan.
Mengingat popularitas TypeScript di Stack Overflow, ini jelas merupakan perubahan yang layak dilakukan. TypeScript bukanlah bahasa khusus.
Meskipun bagi kita yang mengetahui default JavaScript untuk pertanyaan TypeScript dan perbedaan antara ```typescriptdan ```lang-typescriptdapat yakin untuk menggunakan lang-pagar kode, kebanyakan orang tidak akan menyadari aspek SE tersebut dan hanya akan menggunakan Ctrl-K, mentah pagar kode, atau (dalam kasus saya sebelum saya mempelajari perbedaannya) mereka secara tidak sengaja akan menggunakan pagar kode berbasis tag.
Tampaknya ini mungkin memerlukan beberapa perubahan selain hanya mengubah bahasa pemformatan default untuk skrip ketikan mengingat banyak pertanyaan diberi tag baik skrip dan javascript , tetapi sekali lagi, TypeScript bukanlah bahasa khusus atau kemungkinan besar akan menjadi salah satunya dalam waktu dekat. .