2016-07-30 251 views
0

爲什麼TypeScript(2.1.0)會抱怨以下代碼?TypeScript類型的類型

import Request from "../request/request.ts"; 
export default class Machine{ 
    private id: number; 
    private url:string; 
    private make:string; 
    private model:string; 
    private request:any; 
    constructor(){ 
    var self = this; 
    this.request = new Request<self>(this.url); //cannot find name self 
    } 
} 

回答

2

這行代碼的(改變從selfthis):

this.request = new Request<this>(this.url); 

擁有的this關鍵字兩種不同的含義:在運行時

  1. 實際參考thisthis.requestthis.url

  2. 指定的this編譯的類型(new Request<this>

你混了兩個方面的含義,這就是爲什麼它不工作,如果你想使用的self代替this,那麼你就需要使用typeof

this.request = new Request<typeof self>(this.url); 
+0

這是一個錯誤,編譯器不會推斷自己的類型?有沒有理由不應該? –

+1

不,這不是一個bug,'self'是一個變量,但是你把它當作泛型應該是一個類型,所以它不起作用,但是'typeof self'起作用。 –