Short and effective JavaScript & TypeScript snippets for the modern-day developer.
- Over 200 carefully crafted snippets
- Modern JavaScript syntax
- Modern JavaScript APIs (Intl, URL, Navigator...)
- Strategically placed tabstops
- Prefixes created with exact-match in mind
- Auto-generated documentation
Only JavaScript and TypeScript will be supported. Specific frameworks get their own extensions. No bloat.
The following is not mandatory, but could provide a nicer experience. Test them out and decide what works best for you.
Look for it in user settings, or edit the settings.json directly:
Most of the code snippets are without semicolons (;
), except for where it allows for better tabstop management. Strings use single quotes ('
).
It's highly recommended to use these snippets along with Prettier/ESLint to have your code automatically formatted to your preference.
$1
,$2
,$3
specify cursor locations, in order in which tabstops will be visited$0
denotes the final cursor position- Multiple occurrences of the same tabstop are linked and updated in sync
- Tabstops with default values →
${1:name}
- Tabstops with multiple values →
${1|one,two,three|}
. - Truncated in documentation, for easier viewing →
${1|one,...|}
.
Prefix | Name | Body |
ca | const assignment | const ${1:name} = $2 |
la | let assignment | let ${1:name} = $2 |
cas | const string assignment | const ${1:name} = '$2' |
las | let string assignment | let ${1:name} = '$2' |
caa | const array assignment | const ${1:arr} = [$0] |
cao | const object assignment | const ${1:obj} = { $0 } |
dob | object destructuring | const { $2 } = ${1:obj}$0 |
dar | array destructuring | const [$2] = ${1:arr}$0 |
Prefix | Name | Body |
fn | function | function ${1:fn}($2) {
$0
} |
fna | async function | async function ${1:fn}($2) {
$0
} |
nfn | named arrow function | const ${1:fn} = ($2) => {$0} |
nfna | async named arrow function | const ${1:fn} = async ($2) => {$0} |
af | arrow function | ($1) => $0 |
arr | arrow function arrow | => $0 |
afa | async arrow function | async ($1) => $0 |
afb | arrow function with body | ($1) => {
$0
} |
afba | async arrow function with body | async ($1) => {
$0
} |
iife | immediately-invoked function expression | (($1) => {
$0
})($2) |
Prefix | Name | Body |
iff | if statement | if (${1:true}) {$2} |
ifel | if/else statement | if (${1:true}) {$2} else {$3} |
ifei | if/else-if statement | if (${1:true}) {$2} else if ($3) {$4} |
el | else statement | else {
$0
} |
ei | else if statement | else if ($1) {$2} |
ter | ternary operator | $1 ? $2 : $3 |
tera | ternary expression assignment | const ${1:name} = $2 ? $3 : $4 |
sw | switch | switch ($1) {
case $2 : $3
default: $0
} |
scase | switch case | case $1 : $2 |
tc | try/catch | try {
$1
} catch (err) {
$0
} |
tcf | try/catch/finally | try {
$1
} catch (err) {
$2
} finally {
$3
} |
tf | try/finally | try {
$1
} finally {
$2
} |
Prefix | Name | Body |
flr | for loop (range) | for (let ${1:i} = 0; ${1:i} < ${2:5}; ${1:i}++) {
$0
} |
rfl | reverse for loop | for (let ${1:i} = ${2:iter}.length - 1; ${1:i} >= 0; ${1:i}--) {
$0
} |
fin | for...in loop | for (let ${1:key} in ${2:array}) {
$0
} |
fof | for...of loop | for (let ${1:item} of ${2:items}) {
$0
} |
fofa | for await...of loop | for await (let ${1:item} of ${2:items}) {
$0
} |
wl | while loop | while (${1:true}) {
$0
} |
dwl | do while loop | do {
$0
} while ($1) |
Prefix | Name | Body |
cs | class | class $1 {
$0
} |
cse | class extends | class $1 extends ${2:Base} {
$0
} |
csp | class proprety | ${1:name} = ${2:value} |
csc | class with constructor | class $1 {
constructor($2) {
$0
}
} |
csec | class extends with constructor | class $1 extends ${2:Base} {
constructor($3) {
$0
}
} |
cst | class constructor | constructor($1) {
$0
} |
get | getter | get ${1:property}() {
$0
} |
set | setter | set ${1:property}(${2:value}) {
$0
} |
gs | getter and setter | get ${1:property}() {
$0
}
set ${1:property}(${2:value}) {
$0
} |
met | method | ${1:name}($2) {
$0
} |
meta | async method | async ${1:name}($2) {
$0
} |
Prefix | Name | Body |
aat | array.at | $1.at(${2:0}) |
fe | Array.forEach() | $1.forEach((${2:item}) => {
$0
}) |
map | Array.map() | $1.map((${2:item}) => ${3}) |
fmap | Array.flatMap() | $1.flatMap((${2:item}) => ${3}) |
reduce | Array.reduce() | $1.reduce((${2:acc}, ${3:curr}) => {
$0
}, ${4:initial}) |
reduceRight | Array.reduceRight() | $1.reduceRight((${2:acc}, ${3:curr}) => {
$0
}, ${4:initial}) |
filter | Array.filter() | $1.filter((${2:item}) => ${3}) |
find | Array.find() | $1.find((${2:item}) => ${3}) |
findl | Array.findLast() | $1.findLast((${2:item}) => ${3}) |
findi | Array.findIndex() | $1.findIndex((${2:item}) => ${3}) |
findli | Array.findLastIndex() | $1.findLastIndex((${2:item}) => ${3}) |
every | Array.every() | $1.every((${2:item}) => ${3}) |
some | Array.some() | $1.some((${2:item}) => ${3}) |
reverse | Array.reverse() | $1.reverse() |
sort | Array.sort( | $1.sort((${2:a}, ${3:b}) => $4) |
group | Array.group() | $1.group((${2:item}) => $3) |
groupMap | Array.groupToMap() | $1.groupToMap((${2:item}) => $3) |
mapStr | Array.map() to string | $1.map(String) |
mapNum | Array.map() to number | $1.map(Number) |
mapBool | Array.map() to boolean | $1.map(Boolean) |
filterTruthy | Array.filter() truthy | $1.filter(Boolean) |
arfr | Array.from | Array.from($1) |
Prefix | Name | Body |
im | import from module | import { $2 } from '${1:module}' |
imd | import default | import ${2:thing} from '${1:module}' |
ima | import as | import ${2:*} as ${3:name} from '${1:module}' |
imf | import file | import '$1' |
imp | import dynamic | import('$0') |
impa | await import dynamic | await import('$0') |
imm | import meta | import.meta.$0 |
ex | export | export $0 |
exd | export default | export default $0 |
exf | export from | export { $0 } from '${1:module}' |
exa | export all from | export * from '${1:module}' |
exo | export object | export const ${1:name} = { $0 } |
efn | export function | export function ${1:name}($2) {
$0
} |
edfn | export default function | export default function ${1:name}($2) {
$0
} |
enfn | export named arrow function | export const ${1:name} = ($2) => {$0} |
Prefix | Name | Body |
fet | fetch | await fetch($1).then(res => res.json()) |
feta | fetch assignment | const ${1|data,...|} = await fetch($2).then(res => res.json()) |
npr | promise | new Promise((resolve, reject) => {
$0
}) |
prr | Promise.resolve | Promise.resolve($1) |
prj | Promise.reject | Promise.reject($1) |
then | promise then() | $1.then((${2:value}) => $0) |
catc | promise catch() | $1.catch((${2:err}) => $0) |
thenc | promise then().catch() | $1.then((${2:value}) => $3)
.catch((${4:err}) => $5) |
pra | Promise.all | Promise.all($1) |
pras | Promise.allSettled | Promise.allSettled($1) |
pran | Promise.any | Promise.any($1) |
Grouping them all together for now
Prefix | Name | Body |
arr | array literal | [$0] |
ob | object literal | { } |
tl | template literal | `$0` |
tle | template literal operation | ${${1:name}}$0 |
ns | new Set | new Set($1) |
nm | new Map | new Map($1) |
am | array merge | [...$1] |
om | object merge | { ...$1 } |
or | OR (||) | || $0 |
and | AND (&&) | && $0 |
lt | less than (<) | < $0 |
lte | less than or equal to (<=) | <= $0 |
gt | greater than (>) | > $0 |
gte | greater than or equal to (>=) | >= $0 |
nc | nullish coalescing (??) | ?? $0 |
neq | strict non-equality (===) | !== $0 |
eq | strict equality (===) | === $0 |
ora | logical OR assignment (||=) | ||= $0 |
nca | nullish coalescing assignment (??=) | ??= $0 |
plus | addition | + $0 |
minus | subtraction | - $0 |
mul | multiplication | * $0 |
div | division | / $0 |
mod | modulo | % $0 |
inc | addition assignment | += ${0:1} |
sub | subtraction assignment | -= ${0:1} |
mula | multiplication assignment | *= ${0:1} |
diva | division assignment | /= ${0:1} |
col | colon | : |
Prefix | Name | Body |
oe | Object.entries | Object.entries($0) |
ofe | Object.fromEntries | Object.fromEntries($0) |
ok | Object.keys | Object.keys($0) |
ov | Object.values | Object.values($0) |
Prefix | Name | Body |
pi | parse int | parseInt($1, ${2|10,...|}) |
pf | parse float | parseFloat($1) |
uniq | array of unique values | [...new Set($0)] |
seq | sequence of 0..n | [...Array(${1:length}).keys()] |
cp | copy to clipboard | navigator.clipboard.writeText($1) |
nurl | new URL | new URL($1) |
sp | url search params | new URLSearchParams($1) |
spa | url search params assignment | const ${1:params} = new URLSearchParams($2) |
spg | get search param | ${1:params}.get($2) |
sps | set search param | ${1:params}.set($2, $3) |
Prefix | Name | Body |
ret | return | return $0 |
reo | return object | return {
$0
} |
rei | return object inline | return ({$0}) |
terr | throw error | throw new ${1|Error,...|}($0) |
Prefix | Name | Body |
si | set interval | setInterval(() => {
$0
}, ${1:1000}) |
st | set timeout | setTimeout(() => {
$0
}, ${1:1000}) |
sim | set immediate | setImmediate(() => {
$0
}) |
prnt | process next tick | process.nextTick(() => {
$0
}) |
Prefix | Name | Body |
jsp | JSON parse | JSON.parse(${1:json}) |
jss | JSON stringify | JSON.stringify(${1:value}) |
jssf | JSON stringify (formatted) | JSON.stringify(${1:value}, null, 2) |
Prefix | Name | Body |
cl | console.log | console.log($0) |
ci | console.info | console.info($1) |
cdi | console.dir | console.dir($1) |
ce | console.error | console.error($1) |
cw | console.warn | console.warn($1) |
ct | console.time | console.time('$1')
$0
console.timeEnd('$1') |
ctb | console.table | console.table($1) |
clr | console.clear | console.clear() |
clm | console.log message | console.log('$0') |
clo | console.log object | console.log({ $0 }) |
clc | console.log clipboard | console.log({ $CLIPBOARD }) |
cll | console.log (labeled) | console.log('$1 :', $1$2) |
cil | console.info (labeled) | console.info('$1 :', $1$2) |
cel | console.error (labeled) | console.error('$1 :', $1$2) |
cwl | console.warn (labeled) | console.warn('$1 :', ${2:$1}) |
Prefix | Name | Body |
nd | new Date() | new Date($1) |
nds | new Date() with date string | new Date('${1:2023}-${2:|01,...|}-${3:31}') |
now | Date.now() | Date.now() |
tls | Date.toLocaleString() | $1.toLocaleString('${2|en-US,...|}'$3) |
Prefix | Name | Body |
qs | query selector | ${1:document}.querySelector('$2') |
qsa | query selector all | ${1:document}.querySelectorAll('$2') |
qsaa | query selector all as array | [...${1:document}.querySelectorAll('$2')] |
ael | event listener | ${1:document}.addEventListener('${2:click}', (e$3) => $0) |
qsae | query selector with event listener | ${1:document}.querySelector('$2')?.addEventListener('${3:click}', (e$4) => $0) |
gid | get element by id | ${1:document}.getElementById('$2') |
Prefix | Name | Body |
req | require | require('${1:module}') |
rqr | require assignment | const $1 = require('${1:module}') |
mex | module.exports | module.exports = {$1} |
Internationalization API
Prefix | Name | Body |
inf | Intl.NumberFormat | new Intl.NumberFormat('${1|en-US,...|}'$3).format($2) |
infs | Intl.NumberFormat style | new Intl.NumberFormat('${1|en-US,...|}', {
style: '${3|decimal,...|}',$4
}).format($2) |
infc | Intl.NumberFormat as currency | new Intl.NumberFormat('${1|en-US,...|}', {
style: 'currency',
currency: '${3|USD,...|}',$4
}).format($2) |
infp | Intl.NumberFormat as percentage | new Intl.NumberFormat('${1|en-US,...|}', {
style: 'percent',$3
}).format($2) |
infu | Intl.NumberFormat as unit | new Intl.NumberFormat('${1|en-US,...|}', {
style: 'unit',
unit: '${3|acceleration-g-force,...|}',
unitDisplay: '${4|long,...|}',$0
}).format($2) |
idtf | Intl.DateTimeFormat | new Intl.DateTimeFormat('${1|en-US,...|}'$3).format($2) |
idtfs | Intl.DateTimeFormat with style | new Intl.DateTimeFormat ('${1|en-US,...|}', {
dateStyle: '$3',$0
}).format($2) |
Prefix | Name | Body |
aia | is array | Array.isArray($0) |
tof | typeof | typeof $1 |
tofc | typeof check | typeof $1 === '${2|undefined,...|}' |
iof | instanceof | $1 instanceof ${0:Class} |
isnil | is nil | $1 == null |
nnil | is not nil | $1 != null |
isnan | is NaN | isNaN($0) |
nnan | is not NaN | !isNaN($0) |
Prefix | Name | Body |
desc | describe | describe('$1', () => {
$0
}) |
cont | context | context('$1', () => {
$0
}) |
it | test (synchronous) | it('$1', () => {
$0
}) |
ita | test (asynchronous) | it('$1', async () => {
$0
}) |
itc | test (callback) | it('$1', (done) => {
$0
done()
}) |
bf | before test suite | before(() => {
$0
}) |
bfe | before each test | beforeEach(() => {
$0
}) |
aft | after test suite | after(() => {
$0
}) |
afe | after each test | afterEach(() => {
$0
}) |
Prefix | Name | Body |
wlo | window.location | window.location |
wlh | window.location.href | window.location.href |
Prefix | Name | Body |
us | 'use strict' statement | 'use strict' |
prs | process.server | process.server |
prc | process.client | process.client |
env | env variable | process.env.$0 |
envv | env variable (meta) | import.meta.env.$0 |
Available only where TypeScript is supported
Prefix | Name | Body |
cat | const assignment (typed) | const ${1:name}: ${2:string} = $3 |
lat | let assignment (typed) | let ${1:name}: ${2:string} = $3 |
caat | array assignment (typed) | const ${1:arr}: ${2:string}[] = [$0] |
caot | object assignment (typed) | const ${1:obj}: ${2:object} = { $0 } |
Prefix | Name | Body |
int | interface | interface ${1:Model} {
$0
} |
inte | interface extends | interface ${1:Model} extends ${2:Base} {
$0
} |
tp | type | type ${1:Model} = $2 |
tpu | type union | type ${1:Model} = ${2:string} | ${3:number} |
tpi | type intersection | type ${1:Model} = $2 & $3 |
Prefix | Name | Body |
qst | query selector (typed) | ${1:document}.querySelector<${2|HTMLElement,...|}>('$3') |
qsat | query selector all (typed) | ${1:document}.querySelectorAll<${2|HTMLElement,...|}>('$3') |
qsaat | query selector all as array (typed) | [...${1:document}.querySelectorAll<${2|HTMLElement,...|}>('$3')] |
gidt | get element by id (typed) | ${1:document}.getElementById<${2|HTMLElement,...|}>('$3') |
# ensure Deno is installed
# https://deno.land/[email protected]/getting_started/installation
# generate .code-snippets and documentation
npm run generate