2017-05-03 67 views
1

如何強制編譯器不重載toString?我得到的最接近的是使用never類型,但從來沒有被允許隱式賦值給var,編譯器只會在變量完成某些操作時發出抱怨。誰會記得顯式聲明toString調用爲字符串?爲toString強制執行類型簽名

type ArrayToStringMethod = { 
    (this: { join(a: string): string, length: number }): string 
    (this: any): never // if this overload isn't here typescript uses 
        // Object.toString automatically. 
} 

type ArrayDontMutate<t> = { 
    toString: ArrayToStringMethod 
    readonly [index: number]: t 
    readonly length: number 
} & 
Pick< 
    Array<t>, 
    'find' | 
    'map' | 
//'join' | deliberately removed to make toString fail 
    'some' | 
    'slice' | 
    'concat' | 
    'reduce'> 

let a:ArrayDontMutate<string> =['a','b','c'] as any 
let b = a.toString() //should fail no join method. b is the never type 

回答

2

我怎麼強制編譯器不超載的toString

有該驅動器類型如何檢查作品lib.d.ts類型定義原生接口。其中之一是Object接口,此接口有toString方法。

如果您不想使用toString,則可以使用--noLib並創建一個沒有此方法的lib.d.ts的副本。

更多