28
loading...
This website collects cookies to deliver better user experience
Number
or String
in JavaScript, you could extend the prototype directly:// Add helper function to number
Object.defineProperty(Number.prototype,'clamp',{
enumerable: false,
value: function(min, max) {
return Math.min(Math.max(min, this), max);
}
});
// Add setter to allow defining shortcuts for dom elements
Object.defineProperty(HTMLElement.prototype,'shortcut',{
enumerable: false,
set: function() {
this._shortcut = value;
// register key-bindings etc
}
});
(10).clamp(5,15) // Property 'clamp' does not exist on type number
let el = document.createElement('my-component');
el.shortcut = 'ctrl+a' // Property 'shortcut' does not exist on type HTMLElement
// types/extensions.d.ts
declare global {
interface Number {
clamp(min:number, max: number) : number;
}
interface HTMLElement {
set shortcut(value: string);
}
}
.d.ts
file is referenced in your project, the squiggly lines should disappear, and completions should start to work!extend class Number
def clamp(min\number, max\number)
return Math.min(Math.max(min,self),max)
extend tag element
set shortcut value
# register key-bindings etc
let el = <div shortcut='ctrl+a'> <span> 10.clamp(5,15)
10.clamp(5,15)
let el = <div shortcut='ctrl+a'>
import API from './api'
const api = new API
extend tag component
get api
api
# define a custom button
tag edit-user-button < button
<self @click=api.editUser(data)> 'edit user'
# use it in another custom component
tag user-modal
<self>
<h1> "User"
<.actions>
<edit-user-button data=user>
...
# No need to pass the api down into children, or import it from every file.
import API from './api'
extend class API
def broadcast event\string, data = {}
# do something here ...
self