Files
scriptc/tests/diagnostics/runtime-optional-capture-chain.ts

57 lines
1.5 KiB
TypeScript

function logical(values: string[], present: string): void {
let value = values[0];
if (!value) return;
const read = () => console.log((present && value)?.length);
value = values.slice(1)[0];
read();
}
function conditional(values: string[], present: boolean): void {
let value = values[0];
if (!value) return;
const read = () => console.log((present ? value : value)?.length);
value = values.slice(1)[0];
read();
}
function defaults(values: string[]): void {
let value = values[0];
if (!value) return;
const readOr = () => console.log((value || "fallback")?.length);
const readNullish = () => console.log((value ?? "fallback")?.length);
value = values.slice(1)[0];
readOr();
readNullish();
}
function condition(values: string[]): void {
let value = values[0];
if (!value) return;
const read = () => console.log((value ? "yes" : "no")?.length);
value = values.slice(1)[0];
read();
}
function multipleArms(values: (string | number)[]): void {
let value = values[0];
if (!value) return;
value = 1 as unknown as string;
const read = () => console.log(value.length);
read();
}
function commaCall(callbacks: (() => void)[], mark: () => void): void {
let callback = callbacks[0];
if (!callback) return;
const call = () => (mark(), callback)();
callback = callbacks.slice(1)[0];
call();
}
logical(["first"], "yes");
conditional(["first"], true);
defaults(["first"]);
condition(["first"]);
multipleArms(["first"]);
commaCall([() => {}], () => {});