app's TS files do not properly overwrite an addon's JS files
I have the following example component in my addon:
my-addon/addon/components/example/index.ts
import templateOnly from '@ember/component/template-only';
export default templateOnly();
```hbs
**my-addon/addon/components/example/index.hbs**
Then in my app I completely replace it with a new template AND "backing class" with some Glint because why not: my-app/app/components/index.ts
import templateOnlyComponent from '@ember/component/template-only';
interface LoadingSignature {
Element: HTMLElement; // <i>
}
const LoadingComponent = templateOnlyComponent<LoadingSignature>();
export default LoadingComponent;
declare module '@glint/environment-ember-loose/registry' {
export default interface Registry {
Loading: typeof LoadingComponent;
}
}
my-app/app/components/index.hbs
<div>Whatever</div>
This does not work and throws the following error:
It does work when using a JS file to overwrite the component: my-app/app/components/index.js
// I have lost all my Glint stuff, because it's a JS file :'(
import templateOnlyComponent from '@ember/component/template-only';
const LoadingComponent = templateOnlyComponent();
export default LoadingComponent;
my-app/app/components/index.hbs
<div>Whatever</div>
I think this is a version of this issue https://github.com/typed-ember/ember-cli-typescript/issues/780
Maybe @NullVoxPopuli would have more workarounds?
best advice I can give is to not override things this way (app-tree merging was a mistake! :see_no_evil: ).
better to use a separately named thing, separate from the addon entirely, or patch the package.
- https://www.npmjs.com/package/patch-package
- https://yarnpkg.com/cli/patch
- https://pnpm.io/cli/patch
just the same, v1 addons should be migrated to v2 -- which means that the problem shouldn't exist. (but please let me know if you run in to any goofiness)
re: ember-cli-typescript, it likely won't be updated, and folks should migrate away :sweat_smile: (the library can't be used in v2 addons, and isn't needed at all in apps)