$<T> returns the element type it is given and assumes the element is there: 122 lookups take their type from the tag their id is on in the markup. A handler reads its target through a cast, since a typed element will not take a handler whose event names a narrower target. strictNullChecks found no bug the page had; its 94 places were values the code already handles in ways the type-check could not follow (data- attributes the page writes, a map entry set the line before, Share drawn only for an item with a link), each now said so. isPlayable stays a plain boolean: as a type guard its false would have meant "no file", and it is also false for a file that is not audio or video. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
16 lines
546 B
TypeScript
16 lines
546 B
TypeScript
document.getElementById('f')!.onsubmit = async e => {
|
|
e.preventDefault();
|
|
const msg = document.getElementById('msg')!;
|
|
msg.textContent = '';
|
|
const r = await fetch('/api/login', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({
|
|
name: (document.getElementById('name') as HTMLInputElement).value,
|
|
password: (document.getElementById('pw') as HTMLInputElement).value,
|
|
}),
|
|
});
|
|
if (r.ok) location.href = '/';
|
|
else msg.textContent = await r.text() || 'Sign in failed';
|
|
};
|