2017-07-31 54 views
0

我正在爲Typescript中的一些功能編寫管理控制面板,它將返回一個具有特定值(通常爲字符串)的承諾。Typescript Promise type顯示返回變量的名稱

我正在使用VS代碼,當我將鼠標懸停在函數名稱上時,它顯示返回值的類型(字符串,數字等)。 我想也顯示一個名稱與類型,並想知道什麼是最好的方式來做到這一點。

目前,我正在返回一個具有顯式名稱和類型旁邊的屬性的對象。

例子:

通常情況下,你會這樣寫:

function normalizeCarMake (carMake: string):Promise<string> {} 

我寫這樣說:

function normalizeCarMake (carMake: string):Promise<{carMake: string}> {} 

所以,當我懸停在VS的函數調用代碼,它會顯示:

(alias) normalizeCarMakePromise(driverCarMake: string): Promise<{ 
    carMake: string; 
}> 

它有更好的方法來實現這個結果嗎?我不想讓所有隻返回一個值的promise返回複雜化。

+0

我不認爲'string'與'{carMake:string}'是等價的。第一個是'string',第二個是'object',它包含名爲'carMake'的屬性,並且是'string'類型本身。 – eddyP23

+0

唯一字符串與包含字符串的對象之間有區別。 –

+0

我認爲在你的情況下,最好的情況是將'string'封裝在一個單獨的'class'中,並返回它,而不是一個普通的字符串。這樣你就可以實現你想要的,但是這也是最好的編碼標準的良好做法 – eddyP23

回答

1

據我所知,你只想在運行時使用string而不是包含string的對象,但是你想在carMake之類的東西在編譯時存在。一種想法是使用一個類型別名:當你將鼠標懸停在normalizeCarMake

type CarMake = string; 
function normalizeCarMake(carMake: CarMake): Promise<CarMake> { ... } 

不幸的是,它只是取消引用該別名,並且告訴你

function normalizeCarMake(carMake: string): Promise<string> 

一種方法周圍那就是讓別名有點複雜:

type CarMake = string & {__type?: 'CarMake'}; 

哪些仍然會接受string值; CarMake只是string在運行時:

const toyota: CarMake = 'Toyota'; 

現在,如果你將鼠標懸停在功能你

function normalizeCarMake(carMake: CarMake): Promise<CarMake> 

這是你想要的,也許什麼!希望有所幫助;祝你好運!

+0

謝謝你的回答,我可能會這樣做。但是,這是一個問題,我每次都返回一個對象,而不僅僅是返回一個字符串? –

+0

返回一個「{carMake:string}」類型的對象不是問題,如果這就是你想要做的。正如你所指出的那樣,它增加了一些複雜性......在運行時,當你所關心的只是一個「字符串」時,你必須打包和解包一個對象。但是沒有什麼是錯的。 – jcalz