2016-07-30 2 views
0

Почему TypeScript (2.1.0) жалуется на следующий код?TypeScript Generic Тип этого

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

Эта строка кода (изменяется от self до this):

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

Есть два различных значения для this ключевого слова:

  1. Фактическая ссылка на this во время выполнения (this.request и this.url)

  2. Указание типа this для компиляции (new Request<this>)

Вы смешали два значения, и именно поэтому он не работает, если вы хотите использовать self вместо this то вам нужно do use typeof:

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

Это ошибка, которая не является компилятором, который не делает вывод о себе? есть ли причина, почему это не должно быть? –

+1

Нет, это не ошибка, 'self' является переменной, но то, что вы ставите как общий тип, должно быть типом, чтобы оно не работало, но работает' typeof self'. –