[typeScript] js类型推导错误是为什么?

Version: 3.2.2
我有一个 person.js 文件和 test.ts 文件,在 js 文件中创建了一个 student 类和 person 对象,并且把 student 的 prototype 设置为 person,然后导出 student 的实例。
接着,在 test 文件中访问 student 的实例,但是 ts 却访问不到 student 的 prototype 上的属性(也就是 person 上的属性)。

person.js

let student = function () {
    this.age=12;
}
let person = {};
person.name=22;
student.prototype=person;
let tom = new student();

exports.tom =tom;

test.ts

import * as person from './person';
person.tom.name

clipboard.png

阅读 2.1k
2 个回答

你应该要设置一个 Interface,比如

Interface Student {
    name:string
}

Typescrip Interface

你这里 ts 的语法一点都没有用到。

可以下面这样去写

interface IPerson {
  name: string;
}
interface Istudent extends IPerson {
  age: number;
  like: string;
}

const person: IPerson = {
  name: "www"
};

function Student() {
  this.age = 12;
}
Student.prototype = person;

const tom: Istudent = new Student();
console.log(tom.name);
console.log(tom.age);

这里类型推导就是正确的。
图片描述

这里的限制还是有些问题,例如上面的原型返回的对象中其实并没有包含 like 这个字段,但是没有报错。
所以上面的写法还是不太推荐,建议少操作原型,多用 ES6 的一些语法,支持会好多。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进