我尝试在旧的JavaScript代码中注释类型。使用this
类定义时,prototype
出现问题。
例如:
/**
* @constructor
* @param {string} name
* @type {Animal}
*/
function Animal(name){
this.name=name;
}
Animal.prototype.show = function show(){
console.log(this.name);
}
var a = new Animal("bob");
a.show();
当我使用课堂风格时,我没有任何问题:
class AnimalClass{
/**
* @param {string} name
*/
constructor(name){
this.name=name;
}
show(){
console.log(this.name);
}
}
var animal = new AnimalClass("bob");
animal.show();
我的tsconfig.json是:
{
"compilerOptions": {
"lib":["es2017", "es2015", "dom"],
"noImplicitAny": true,
"alwaysStrict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
"noFallthroughCasesInSwitch": true,
"allowJs": true,
"strict": true,
"strictFunctionTypes": true,
"strictNullChecks": true,
"checkJs": true,
"noImplicitThis": true
}
}
答案 0 :(得分:0)
除了语法糖之外,ES6类本身也能在TypeScript中提供正确的输入,而常规函数应该显式输入。
本课
function Foo() {};
Foo.prototype.bar = function () {
this.baz;
};
变为
interface Foo {
bar(): void;
baz: any;
}
interface FooStatic {
new(): Foo;
}
const Foo = <FooStatic><Function>function Foo(this: Foo) {};
Foo.prototype.bar = function (this: Foo) {
this.baz;
};
为了正确输入。
同一类可以固有地输入为ES6类:
class Foo {
baz: any;
bar() {
this.baz;
}
}