The goal#
Generate a file and offer it for download using only client-side JavaScript that is valid TypeScript.
The solution#
var fileContents = "Hello world!";
var filename = "hello.txt";
var filetype = "text/plain";
var a = document.createElement("a");
dataURI = "data:" + filetype +
";base64," + btoa(fileContents);
a.href = dataURI;
a['download'] = filename;
var e = document.createEvent("MouseEvents");
// Use of deprecated function to satisfy TypeScript.
e.initMouseEvent("click", true, false,
document.defaultView, 0, 0, 0, 0, 0,
false, false, false, false, 0, null);
a.dispatchEvent(e);
a.removeNode();
This code offers a download of a file named hello.txt
with the
Internet media type text/plain
containing the string Hello
world!
.
Warning: This uses the deprecated
initMouseEvent()
as a workaround
to this TypeScript bug. While presently functional
in Chrome and Firefox, this code may stop working in future
versions of those browsers.