TypeScript: Turn an Array of Values into a Type Union

I found the answer I was looking for here: I wasn't sure that it would be possible. In fact, it turns out that the solution is far more impressive than I expected. What follows cuts to the core part of the article that I need solved my particular problem. Problem I want to have an object type with specific keys and I want a static array of those keys, but I don't want to have the same list of keys written out twice in case I mistakenly make them differ in the future. type K = "a" | "b" | "c"; type O = Record<K, V>; const keys: K[] = ["a","b","c"]; I want to be sure that 'keys' contains every member of type 'K' exactly once and vice-versa. I want to use 'keys' to build an object of type 'O', so I can't just rely on using 'Object.keys' on an existing object. Solution const keys = ["

In HTML the default type of button is not button

The default type of <button> is "submit" which is why a <button> in a <form> submits the form when clicked. Simply doing <button type="button"> removes this behaviour without the need for JavaScript.

Hiding non-hidden files in your file manager

Create a file called .hidden and fill it with a newline separated list of files. Works in Nautilus and Dolphin. Perfect for ~/snap.

The TypeScript "extends" Keyword Doesn't Extend Types

I was looking through the built in TypeScript definition file "lib.es5.d.ts" and found the definition "Pick". //From T pick a set of properties K type Pick<T, K extends keyof T> = {     [P in K]: T[P]; }; In more words: Pick<T,K> is a new type of object whose keys are the set K , which has to be a subset of the keys in T . But when I tried to understand what it was from the code itself, I had some trouble, and the source of that trouble is simply the extends  keyword. We usually use ' A extends B ' to mean  A  has all the keys in  B  and maybe some more, which the English also suggests. But in reality  K must be a subset of T 's keys. What is going on? What is a Type? A type is a set of values based on some rule. e.g. Colour = { red orange yellow ... } If A is a subtype of B, values that match A are a subset of values that match B. The definition of the subtype therefore has to be a narrower version of the

Turn a Web Page into a Desktop Application

I can't believe how simple the whole thing turned out to be. It's literally this simple, if you have Chromium/Chrome installed. Linux: Make sure you didn't install Chromium with snap. Go to the URL you want the app to open to Ellipsis Button (...) ->  "More tools"  ->  "Create shortcut" Don't un-tick the checkbox for "Open as window" Click "Create" Copy the newly created .desktop file to ~/.local/share/applications Windows: Basically the same But you'll have to look up how to put the shortcut in the all programs list I used to have on my desktop a shortcut to the all programs folder, which I used to drag and drop shortcuts into Formerly meirl: "Oh, what a dream that would be!" "It's a shame so many great programs are stuck nested in a browser window." "The Chromium button on my launcher is cramped with stuff that doesn't belong there." "I love Alt+Tab.&q

Solution to Unity Desktop Fullscreen Graphical Glitch

You may find that your out of the box installation of Unity Desktop has the following glitch: Connect a second screen Fullscreen a window on one of those screens Do something on the other screen e.g. focusing or maximising a window The exact actions that cause an issue aren't very consistent. Solution: Install CompizConfig Utility → Workarounds Set "Force full screen redraws (buffer swap) on repaint" to true.

Custom Date Display in Unity Desktop (and probably some others)

I found that the date and time displayed by Unity Desktop can be customised. In dconf-editor (or in the terminal) com.indicator.datetime contains many options about date formatting. Set time-format to custom . This allows custom-time-format to be used for formatting. Set custom-time-format to a format string. When I discovered this was possible, it was difficult to find out the exact properties the format string could have. Not all of the placeholders are intuitive: `%w %d/%b/%Y %R`. It's easier to work it out with context from snippets online but I wanted a complete list of the options I had available. It turns out the C function called strftime is used, which means the syntax can easily be looked up on the internet or in the manpages. This reminded me of PHP's date format function , but it's different and not just the lack of percent signs.