2017-05-26 56 views
0

這裏的例子,你可以在操場上打字原稿貼:更改或重新分配對象打字稿動態輸入

class Greeter { 
greeting: {}; 
constructor(message: string) { 
    let newTyping: { text: string }; // reassign needed 
    this.greeting=newTyping 
    this.greeting.text = message; // typing error 
} 
greet() { 
    return "Hello, " + this.greeting.text; 
} 
} 

let greeter = new Greeter("world"); 

let button = document.createElement('button'); 
button.textContent = "Say Hello"; 
button.onclick = function() { 
alert(greeter.greet()); 
} 

document.body.appendChild(button); 

正如你所看到的,this.greeting.text顯示了一個錯誤:我需要重新分配{}來{text:string}輸入。

是否可以動態執行此操作,因爲在我的代碼中,我不知道在運行時將使用哪種類型填充對象(因此我將它作爲默認輸入)?

非常感謝您的幫助。

+0

您應該重新設計您的代碼以始終使用相同的類型。 – SLaks

+0

*在我的代碼中,我不知道哪種類型將用於在運行時填充對象* - 您是怎麼意思的?如果你不知道類型,那麼你的代碼有幾個錯誤,因爲它假定'greeting'是一個帶有'text'屬性的對象。 – Aaron

+0

試想一下,在一個類中共享屬性對象:你不知道其他人如何定義這個共享對象,所以他們需要能夠應用自己的輸入並獲得他們自己的智能感知。 – Alphapage

回答

1

TS中有一個特殊的類型:any。它更接近「默認類型」,然後是空對象類型({})。如果沒有可用於符號的類型信息(變量,屬性),則編譯器默認使用它。

+0

但它會讓你的代碼變弱;你不應該使用它。 – SLaks

+0

我不知道。但這個問題的作者需要它出於某種原因。 –

+0

否;作者需要製作更爲理想的類型。 – SLaks