问题描述
我想创建一种扩展方法,该扩展方法如果是NAN或NULL,则将任何类型的字符串或数字转换为空字符串,但是会出现此错误。
declare global {
interface Any {
NullToEmptyString(): any;
}
}
Any.prototype.NullToEmptyString = function (): any{ <--- Here is error
return this == null ? '' : this;
}
解决方法
any
纯粹是一种类型,它实际上不在类型系统之外。而且您无论如何都无法向null
添加方法,这只会导致异常。您应该制作一个采用any
参数的方法:
function nullToEmptyString(arg: any): any {
return arg == null ? '' : arg;
}
,
interface
来自https://www.typescriptlang.org/docs/handbook/interfaces.html的定义:
TypeScript的核心原则之一是类型检查的重点是 值的形状。有时称为“鸭子打字”或 “结构子类型化”。在TypeScript中,接口充当以下角色 命名这些类型,是定义合同的有效方法 在您的代码中以及与您外部代码的合同 项目。
并且,接口未编译到打字稿文件的javascript
端。
例如:
interface Hello {
}
class Hello2 {
}
转换为:
var Hello2 = /** @class */ (function () {
function Hello2() {
}
return Hello2;
}());
因此,要使代码正常工作,您需要使用类而不是接口(但可能无法实现您的其他目标):
export { };
declare global {
class Any {
NullToEmptyString(): any;
}
}
Any.prototype.NullToEmptyString = function (): any {
return this == null ? '' : this;
}
将代码转换为:
"use strict";
exports.__esModule = true;
Any.prototype.NullToEmptyString = function () {
return this == null ? '' : this;
};