Typing question with createSignal() #215
-
The following code produces this complaint from the compiler: const [resetTo$, doResetTo] = createSignal();
doResetTo(5); whereas this code will compile: const [resetTo$, doResetTo] = createSignal(x => x);
doResetTo(5); and so will this: const [resetTo$, doResetTo] = createSignal<number>();
doResetTo(5); I'm not sure I find this intuitive, or understand why that overload at is necessary. Assuming this is all as intended, do you wish me to document it? |
Beta Was this translation helpful? Give feedback.
Replies: 3 comments
-
Yep, I see we need to clarify this... maybe we can add a few examples in the API reference for createSignal. There are different ways we currently use createSignal:
const [buttonPress$, buttonPressed] = createSignal();
// buttonPress$ is Observable<void>
// buttonPressed is () => void
// ...
<button onClick={() => buttonPressed()}>...</button>
const [itemComplete$, completeItem] = createSignal<number>();
// itemComplete$ is Observable<number>
// completeItem is (payload: number) => void
// ...
<button onClick={() => completeItem(id)}>...</button> Note that the payload can be any type - it can also be an object or whatever
const [statusChange$, setStatus] = createSignal((id: number, status: Status) => ({ id, status }));
// statusChange$ is Observable<{id: number, status: Status}>
// setStatus is (id: number, status: Status) => void
// ...
<button onClick={() => setStatus(id, Status.Complete)}>...</button> For some of these cases I would use |
Beta Was this translation helpful? Give feedback.
-
Okay. So it looks like users should in general only be putting type parameters on the second case, maybe the first if they really feel like being explicit, and rely on genericity in third case. Good? |
Beta Was this translation helpful? Give feedback.
-
Yes... Well, it's just the way that's easier to use IMO.
It's not like they should put parameters explicitly, is that if they do, it will be easier to type and read IMO. It was designed like this to make it easier. |
Beta Was this translation helpful? Give feedback.
Yes... Well, it's just the way that's easier to use IMO.
createSignal()
is sugar forcreateSignal(() => {})
- Just faster to typecreateSignal<number>()
is sugar forcreateSignal((payload: number) => payload)
- Again, less charactersIt's not like they should put parameters explicitly, is that if they do, it will be easier to type and read IMO. It was designed like this to make it easier.