2016-07-21 32 views
3

我剛剛開始打字稿,並陷入了這個問題。打字稿中兩個代碼有什麼區別?

我有兩個代碼,第一個代碼中有一個對象name,在另一個代碼中(與第一個代碼相同),變量名稱更改爲user。 現在的問題是第一個代碼創建錯誤,但首先工作正常。

第一個代碼(誤差產生)

interface Person { 
    firstName : string; 
    lastName : string; 
} 

function greeter(person: Person) { 
    return "Hello " + person.firstName + " " + person.lastName; 
} 

var name = {firstName: "Girdhari", lastName: "Agrawal"}; 
document.body.innerHTML = greeter(name); 

第二個代碼(做工精細)

interface Person { 
    firstName : string; 
    lastName : string; 
} 

function greeter(person: Person) { 
    return "Hello " + person.firstName + " " + person.lastName; 
} 

var user = {firstName: "Girdhari", lastName: "Agrawal"}; 


document.body.innerHTML = greeter(user); 

請幫我理解這一點。

編輯

This is what I am getting while compiling first script 
greeter.ts(10,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'name' must be of type 'string', but here has type '{ firstname: string; lastName: string; }'. 
greeter.ts(13,35): error TS2345: Argument of type 'string' is not assignable to parameter of type 'Person'. 
+5

什麼是錯誤?還要檢查非工作版本中的任何不可見字符。 –

+0

編輯問題 –

+3

您可能將'name'作爲字符串在代碼中的其他位置定義。 – Igor

回答

7

這是因爲nameglobal variable defined in lib.d.tsWindow.name):

declare var name: string; 

你得到這個錯誤的原因是因爲你的代碼也是在全球範圍內。這就是爲什麼使用不同的變量名稱的原因。