Comments (4)
I don't have time to check every TS error (from all of your issues) - can you confirm if the problem is solved by using TS v4
?
FYI: #236 (comment)
from hybrids.
Update: In the first case, this is my mistake. I shouldn't have written
function toggleEdit(host: ISecondComponent) {
host.editMode = true
host.draft = host.model
host.content().querySelector('input').focus()
}
but
function toggleEdit(host: Component<ISecondComponent>) {
host.editMode = true
host.draft = host.model
host.content?.(host).querySelector('input').focus()
}
result:
import { Model, define, html, store, Component } from "https://esm.sh/[email protected]"
export interface IModel {
prop1: number
}
export const ModelStore: Model<IModel> = {
id: true,
prop1: 1
}
function toggleEdit(host: Component<ISecondComponent>) {
host.editMode = true
host.draft = host.model
host.content?.(host).querySelector('input').focus()
}
export interface ISecondComponent extends HTMLElement {
model: IModel
draft: IModel
editMode: boolean
}
export default define<ISecondComponent>({
tag: "a-second",
model: store(ModelStore),
draft: store(ModelStore, { draft: true }),
editMode: {
get: (host, lastValue) => !host.model || lastValue,
set: (host, value, lastValue) => value,
},
content: ({ draft, model, editMode }) => html`
${editMode ? html`
<form>
<input value="${draft.prop1}" oninput="${html.set(draft, 'prop1')}" />
<button type="submit">Save</button>
</form>
` : html`
${store.ready(model) && html`<div>${model.prop1}</div>`}
<div><button onclick="${toggleEdit}">Edit</button></div>
`}
`
})
With this fix on typescript 4.9.5, another error appears in the same place:
from hybrids.
Update your example with (it fixes the TS errors):
function toggleEdit(host: ISecondComponent) {
host.editMode = true;
host.draft = host.model;
host.content().querySelector("input")?.focus();
}
export interface ISecondComponent extends HTMLElement {
model: IModel;
draft: IModel;
editMode: boolean;
content: () => ISecondComponent;
}
The argument of the toogleEdit
is ISecondComponent
, not Component<...>
- this would be a definition, not an instance.
And if you want to use content
or render
directly, you must define those properties too in ISecondComponent
, like you do for the rest of the properites.
from hybrids.
Thank you. This solved the problem.
from hybrids.
Related Issues (20)
- Small Type Inferencing Issue with Property<E, V> HOT 6
- Cannot pass an object to the API via the "list" method HOT 7
- version 8.2.17 backwards compatibility is broken! HOT 9
- Expand the functionality of drafts
- sync() with nested models is broken HOT 4
- Allow storing an object in a component property HOT 4
- Add partial loading of model data HOT 3
- Why do you remove the lastValue? HOT 2
- The store logs a lot of errors HOT 4
- Convert a Whole Component to Web Component HOT 8
- Scoped CSS HOT 6
- lagging update glitch HOT 2
- Component properties cannot be setted until they are observed HOT 2
- `store.set()` is very slow HOT 5
- Store loads items data when iterating the list of items HOT 2
- store.record(store.record('')) bug HOT 3
- Protect Models from incorrect use HOT 9
- Passing a transform function to 'reflect:' in a property descriptor has no effect without also specifying an observer HOT 2
- Add nullable model values HOT 3
- 'Try to assert value of the '<property_name>' inside of the value function' error while passing children their properties HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hybrids.