2017-03-16 69 views
1

我在導入我的angular 2應用程序中的html模板時遇到了麻煩。Typescript 2通配符模塊

declare module "*.html" { 
    const content: string; 
    export default content; 
} 

在app.component.ts

import { Component } from '@angular/core'; 

import './app.component.css'; 
import * as template from './app.component.html'; 

@Component({ 
    selector: 'app', 
    template: <string>template 
}) 
export class AppComponent { 
    constructor() { 
     console.log('I am App'); 
    } 
} 

該應用的工作原理和模板加載globals.d.ts但我得到這個錯誤TS2352:類型「typeof運算「* .html「'不能轉換爲'string'類型。有人有解決方法嗎?

我想這樣做。

import template from './app.component.html'; 

@Component({ 
    template: template 
}) 
... 

但是編譯後的代碼就這樣結束了。

var app_component_html_1 = __webpack_require__(653); 
... 
template: app_component_html_1.default 

app_component_html_1是我需要的字符串。爲什麼他們添加.default?

+1

你爲什麼這麼做?爲什麼不只是'templateUrl:'。/ app.component.html''? – jonrsharpe

+0

正在測試角2 a,並使用templateUrl。但發現它很難用於webpack。需要額外的裝載機和步驟來使其工作。 我以爲只使用模板:會更容易。 xD –

+0

只是想說明我在TS 2.2中遇到同樣的問題。但是,我的html導入使用ng-cache-loader和webpack解析爲模板緩存鍵。我有從'./header.template.html';'import *作爲templateUrl,但是當我去使用'templateUrl: templateUrl'指定一個指令時,我得到了與OP所述的相同的錯誤。 –

回答

4

修改export default content;export = content;解決了此打字稿錯誤。

之前 Not work

Worked

而且transpiled代碼應該相應地工作(因爲 '默認' 被移除)。

+0

剛剛對前一個添加了評論。我解釋這一點對我來說不再是一個問題。不過謝謝你。也許別人覺得這很有用。 –

+0

我不知道這是爲什麼起作用,並且感覺像一個bug,因爲我在TS git問題中看到的大多數評論都使用默認值。不過,這是我現在要做的。謝謝。 –

+1

我認爲這是設計 - 因爲'export ='是在Typescript文檔中定義的有效表達式。 https://www.typescriptlang.org/docs/handbook/modules.html#export--and-import--require – Val