-
-
Notifications
You must be signed in to change notification settings - Fork 4.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
breaking: conditional ActionReturn type if Parameter is void (#7442)
--------- Co-authored-by: Ivan Hofer <ivan.hofer@outlook.com> Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> Co-authored-by: Ignatius Bagus <ignatius.mbs@gmail.com> Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com>
- Loading branch information
1 parent
d6bcddd
commit 56a6738
Showing
4 changed files
with
170 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,153 @@ | ||
import type { Action, ActionReturn } from '$runtime/action'; | ||
|
||
// ---------------- Action | ||
|
||
const href: Action<HTMLAnchorElement> = (node) => { | ||
node.href = ''; | ||
// @ts-expect-error | ||
node.href = 1; | ||
}; | ||
href; | ||
|
||
const required: Action<HTMLElement, boolean> = (node, param) => { | ||
node; | ||
param; | ||
}; | ||
required(null as any, true); | ||
// @ts-expect-error (only in strict mode) boolean missing | ||
required(null as any); | ||
// @ts-expect-error no boolean | ||
required(null as any, 'string'); | ||
|
||
const required1: Action<HTMLElement, boolean> = (node, param) => { | ||
node; | ||
param; | ||
return { | ||
update: (p) => p === true, | ||
destroy: () => {} | ||
}; | ||
}; | ||
required1; | ||
|
||
const required2: Action<HTMLElement, boolean> = (node) => { | ||
node; | ||
}; | ||
required2; | ||
|
||
const required3: Action<HTMLElement, boolean> = (node, param) => { | ||
node; | ||
param; | ||
return { | ||
// @ts-expect-error comparison always resolves to false | ||
update: (p) => p === 'd', | ||
destroy: () => {} | ||
}; | ||
}; | ||
required3; | ||
|
||
const optional: Action<HTMLElement, boolean | undefined> = (node, param?) => { | ||
node; | ||
param; | ||
}; | ||
optional(null as any, true); | ||
optional(null as any); | ||
// @ts-expect-error no boolean | ||
optional(null as any, 'string'); | ||
|
||
const optional1: Action<HTMLElement, boolean | undefined> = (node, param?) => { | ||
node; | ||
param; | ||
return { | ||
update: (p) => p === true, | ||
destroy: () => {} | ||
}; | ||
}; | ||
optional1; | ||
|
||
const optional2: Action<HTMLElement, boolean | undefined> = (node) => { | ||
node; | ||
}; | ||
optional2; | ||
|
||
const optional3: Action<HTMLElement, boolean | undefined> = (node, param) => { | ||
node; | ||
param; | ||
}; | ||
optional3; | ||
|
||
const optional4: Action<HTMLElement, boolean | undefined> = (node, param?) => { | ||
node; | ||
param; | ||
return { | ||
// @ts-expect-error comparison always resolves to false | ||
update: (p) => p === 'd', | ||
destroy: () => {} | ||
}; | ||
}; | ||
optional4; | ||
|
||
const no: Action<HTMLElement, never> = (node) => { | ||
node; | ||
}; | ||
// @ts-expect-error second param | ||
no(null as any, true); | ||
no(null as any); | ||
// @ts-expect-error second param | ||
no(null as any, 'string'); | ||
|
||
const no1: Action<HTMLElement, never> = (node) => { | ||
node; | ||
return { | ||
destroy: () => {} | ||
}; | ||
}; | ||
no1; | ||
|
||
// @ts-expect-error param given | ||
const no2: Action<HTMLElement, never> = (node, param?) => {}; | ||
no2; | ||
|
||
// @ts-expect-error param given | ||
const no3: Action<HTMLElement, never> = (node, param) => {}; | ||
no3; | ||
|
||
// @ts-expect-error update method given | ||
const no4: Action<HTMLElement, never> = (node) => { | ||
return { | ||
update: () => {}, | ||
destroy: () => {} | ||
}; | ||
}; | ||
no4; | ||
|
||
// ---------------- ActionReturn | ||
|
||
const requiredReturn: ActionReturn<string> = { | ||
update: (p) => p.toString() | ||
}; | ||
requiredReturn; | ||
|
||
const optionalReturn: ActionReturn<boolean | undefined> = { | ||
update: (p) => { | ||
p === true; | ||
// @ts-expect-error could be undefined | ||
p.toString(); | ||
} | ||
}; | ||
optionalReturn; | ||
|
||
const invalidProperty: ActionReturn = { | ||
// @ts-expect-error invalid property | ||
invalid: () => {} | ||
}; | ||
invalidProperty; | ||
|
||
type Attributes = ActionReturn<never, { a: string; }>['$$_attributes']; | ||
const attributes: Attributes = { a: 'a' }; | ||
attributes; | ||
// @ts-expect-error wrong type | ||
const invalidAttributes1: Attributes = { a: 1 }; | ||
invalidAttributes1; | ||
// @ts-expect-error missing prop | ||
const invalidAttributes2: Attributes = {}; | ||
invalidAttributes2; |