angular2-template-loader icon indicating copy to clipboard operation
angular2-template-loader copied to clipboard

Problem: Cannot use angular2-template-loader with webpack-env.d.ts

Open lacolaco opened this issue 7 years ago • 4 comments

For use webpack APIs (like require.context()), webpack-env.d.ts is needed. The definition includes its own require.

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/webpack/webpack-env.d.ts#L21

It returns a value as T. so require() returns the type {}.

error TS2345: Argument of type '{ selector: string; template: {}; }' is not assignable to parameter of type 'ComponentMetadataType'.
  Types of property 'template' are incompatible.
    Type '{}' is not assignable to type 'string'.

idea

Maybe, The loader should replace templateUrl to <string>require(...).

lacolaco avatar Sep 05 '16 03:09 lacolaco

Oh interesting. I'll welcome a pr and tests for this absolutely.

TheLarkInn avatar Sep 09 '16 17:09 TheLarkInn

Does anyone have a workaround for that?

I also feel that replacing stuff with <string>require(...) might interfere with tslint (and tslint-loader) setting of treating such constructs an error. But not sure about this last piece

DethAriel avatar Feb 24 '17 00:02 DethAriel

@TheLarkInn I also think that given the fact that this project's primary consumers are Webpack users, you should really be recommending to install @types/webpack-env

DethAriel avatar Feb 24 '17 00:02 DethAriel

The correct way to require a string with webpack-env.d.ts is

require<string>(...)

nertzy avatar Feb 26 '17 16:02 nertzy