例如:在js文件中写Object.prototype.dosth=function(){},
如何在typescript中使用这个dosth方法,或者直接在ts中就可以扩展?
例如:在js文件中写Object.prototype.dosth=function(){},
如何在typescript中使用这个dosth方法,或者直接在ts中就可以扩展?
强行这么写是可以的,虽然TS会报错但是其实可以执行。
不过TS中不应该这么做,TS的目的就是一定程度上实现强类型,做法应该是像C#、Java中那样使用继承:
class Parent {
public SayHi() {
console.log('hi');
}
}
class Child extends Parent {
public SayNo() {
console.log('no');
}
}
new Child().SayHi(); // call method from Parent
typescript定义文件global.d.ts
interface Object {
dodo(): any;
}
测试代码a.ts
const a = 'a';
a.dodo();
完美通过编译
如果不是为了兼容,最好都不要扩展。用好extend和implements可以省下很多代码。
之前开发angular4项目,页面相关创建一个BasePage类提供共用的方法,provider相关也有一个BaseProvider。
至于在原生扩展,目前没有遇到必须要这样用的场景
内置的lib声明了Object 的类型,所以你这样写找不到该方法编译就会报错。
ts提供了类型断言解决这个问题:
(Object as any).prototype.dosth= function () {
};
这个情景下,你断言成any了,所以就不会报错了
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
2 回答4.3k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
5 回答808 阅读
无论
TS
还是JS
, 一般情况都不推荐扩展原生对象的原型方法。只有在为了兼容新标准的 API 才被允许扩展。
但是在TS上做到兼容新标准的 API 很容易,
只需要将
tsconfig.json
中的"target"
设置为"es2015"
,"es2016"
或"es2017"
就可以。