Kgtkr's Blog
Profile image
Web Developer.
RSS
2017/11/06
普通に 普通に読み込むとエラーになります。 app.ts import * as hoge from 'hoge'; 推奨 ソースフォルダに適当な名前.d.tsファイルを作って以下の内容を書きます。 types.d.ts declare module 'hoge'; あとは普通に読みこめばOKです。 app.ts import * as hoge from 'hoge'; ワイルドカード ワイルドカードも使えます。 types.d.ts declare module '*'; 非推奨 これでも一応出来ますが、あまりおすすめはしません。 app.ts declare function require(path: string): any; const hoge = require('hoge'); 参考 https://github.com/Microsoft/TypeScript/issues/6615
2017/09/10
普通に書く let arr1:(number|string)[]=['a','b','c',1,2,3]; let arr2=arr1.filter(x=>typeof x==='string'); arr2にはstringしか入ってないはずなのに型は(number|string)[]になってしまいます。 型ガード let arr2 = arr1.filter<string>((x): x is string => typeof x === 'string'); これでarr2はstring[]になります。 注意 let arr2=arr1.filter<number>((x): x is number => typeof x === 'string'); このような事をしてもコンパイルエラーにはなりません。 arr2の実際の型はstring[]なのにTypeScriptはnumber[]と認識します。 キャストと同じように危険な操作なので注意しましょう。 他のライブラリ immutable.jsやrxjsでも似たような事を出
2017/09/06
構文エラー ()=>{x:1} 長い ()=>{return {x:1};} こうしよう ()=>({x:1})
2017/08/30
余計なタグとは 下記のようなテンプレートがあったとします。 //<my-msg>コンポーネント <div>{{msg}}</div> //使う <my-msg [msg]="'はろー'"></my-msg> reactやvue.jsの場合以下のように出力されます。 <div>はろー</div> しかしAngularの場合は以下のように出力されます。 <my-msg><div>はろー</div></my-msg> つまり余計なタグとは<my-msg>など独自コンポーネントのセレクターの事です。 一般的な場合の回避方法 selectorをdiv[myMsg]と指定し、テンプレートを以下のようにすることで回避する事が出来ます。 //定義 {{msg}} //使用 <div myMsg [msg]="'はろー'"></div> しかし、この方法はASTの再起では使えません。 (正確には使えないことはないがNodeの種類^2コピペしないといけないのでしたくない) 解決方法 ng-templateとngTemplateOu
2017/04/01
解決法 innerHTMLに設定するHTMLはデフォルトでサニタイズされるようになっており、iframeタグが自動的に除去されるのが原因でした。 サニタイズされるのはjavascriptだけだと思っていましたが、iframeも駄目みたいです。 import { DomSanitizer } from '@angular/platform-browser'; constructor(private sanitizer: DomSanitizer) {} let innerHTML = this.sanitizer.bypassSecurityTrustHtml(html); 注意 サニタイズすると、iframeだけではなくjavascriptも埋め込み可能になるのでXSSには注意して下さい。 参考 Security - GUIDEDomSanitizer - API