如何强制编译器不重载toString?我得到的最接近的是使用never类型,但仍然允许永远不允许将其隐式分配给var,编译器只有在对变量执行某些操作时才会抱怨。谁会记得将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
答案 0 :(得分:2)
如何强制编译器不要重载toString
lib.d.ts
类型定义中有一些本机接口可以驱动类型检查器的工作方式。其中一个是Object
接口,此接口具有toString
方法。
如果您想禁止toString
,可以使用--noLib
并创建一个没有此方法的lib.d.ts
副本。