使用Javascript对象的打字稿

使用Javascript对象的打字稿

问题描述:

我正在通过Node进行开发。 我有一个Javascript下列对象文件使用Javascript对象的打字稿

function Person{ 
    this.name = 'Peter', 
    this.lastname = 'Cesar', 
    this.age = 23 
} 

我想这个实例化对象在我的打字稿代码:

let peter: any = new Person(); 

但我发现了“找不到name'Person””这是正常的因为我需要为之前的函数定义签名。我怎样才能做到这一点?

所以首先我觉得你的香草JavaScript语法是错误的,应该是

function Person() { 
    this.name = 'Peter'; 
    this.lastname = 'Cesar'; 
    this.age = 23; 
} 

然后在打字稿,你可以做

declare var Person: any; 
let peter: any = new Person; 
let john: any = new Person; 

确保外部JS包含,那么你可以有多个对象Person

+0

这就是我正在寻找的,我只是想知道,为什么 声明函数Person():void; let peter:any = new Person() 不起作用。 – skizofre3e

用此代替人功能

export class Person { 
    name:string = 'Peter'; 
    lastname:string = 'Cesar'; 
    age:number = 23 
} 
+0

我想用它作为外部的JS,如果我这样做,它意味着它已经是代码的一部分。在我看来,我需要做的是定义函数的签名或类型 – skizofre3e

是的,我认为你需要做的是“申报”的功能。

declare function Person(): void; 

您可以在官方文档中阅读“声明”。

答案是@TomKunzemann和@ GauravSrivastava的答案的组合:您应该将declare作为class

随着declare你只是告诉编译器关于类型的形状和行为而不实现它,所以它依赖于JavaScript中包含的环境Person函数。

class,你告诉TypeScript,这是你用new实例化的东西。

最后,您可能不希望将peter定义为any类型,否则TypeScript将不会在之后检查它。如果刚刚离开关闭: any,打字稿将推断peterPerson类型的,它会执行所期望的类型的检查,如检测错别字(的例如,lastName代替lastname):

declare class Person { 
    name: string; 
    lastname: string; 
    age: number; 
} 

let peter = new Person(); // okay 
console.log(peter.name); // okay 

// note the typo below 
console.log(peter.lastName); // error! 
// "Property 'lastName' does not exist on type 'Person'. Did you mean 'lastname'"? 

希望帮助;祝你好运!