2017-03-02 65 views
6

我遇到這個代碼和不理解正是它:打字稿。什麼是平均:(這是所有)

public uploadItem(value:FileItem):void { 
    let index = this.getIndexOfItem(value); 
    let item = this.queue[index]; 
    let transport = this.options.isHTML5 ? '_xhrTransport' : '_iframeTransport'; 
    item._prepareToUploading(); 
    if (this.isUploading) { 
     return; 
    } 
    this.isUploading = true; 
    (this as any)[transport](item); 
    } 

誰能解釋一下這是否(這是所有)說法嗎?

+4

'這是任何'是一個演員。它將'this'轉換爲'any'類型(這也消除了大部分編譯時類型檢查) – UnholySheep

+1

它不是@UnholySheep,這是斷言。 Casting在運行時工作,但斷言在dev/compiling上工作,沒有副作用,因爲它是一個純粹的Typescript事物。 – Mouneer

+1

@Mouneer微軟自己有時稱之爲演員(如[TypeScript 1.6的發行記錄](https://github.com/Microsoft/TypeScript/wiki/What's-new-in-TypeScript#new-tsx-file-擴展和作爲運營商)),所以這就是我的術語混淆源於 – UnholySheep

回答

3

(這是所有)只是一個Type Assertion上開發/編譯時間工作和對運行時沒有副作用,因爲它是一個純粹的打字稿的事情。--suppressImplicitAnyIndexErrorscompiler option:如果涉及到thisthis[whatever]一些東西,輸出一個錯誤,因爲這個錯誤可以用(this as any)[whatever]

(this as any)被抑制是相當於(<any> this)

注提它可能是有用的抑制那些可能的錯誤。

2

它實際上可以寫成

(<any>this)[transport](item); 

類型轉換在上面的語句展出!