使用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
用此代替人功能:
export class Person {
name:string = 'Peter';
lastname:string = 'Cesar';
age:number = 23
}
我想用它作为外部的JS,如果我这样做,它意味着它已经是代码的一部分。在我看来,我需要做的是定义函数的签名或类型 – skizofre3e
是的,我认为你需要做的是“申报”的功能。
declare function Person(): void;
您可以在官方文档中阅读“声明”。
答案是@TomKunzemann和@ GauravSrivastava的答案的组合:您应该将declare
作为class
。
随着declare
你只是告诉编译器关于类型的形状和行为而不实现它,所以它依赖于JavaScript中包含的环境Person
函数。
和class
,你告诉TypeScript,这是你用new
实例化的东西。
最后,您可能不希望将peter
定义为any
类型,否则TypeScript将不会在之后检查它。如果刚刚离开关闭: any
,打字稿将推断peter
是Person
类型的,它会执行所期望的类型的检查,如检测错别字(的例如,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'"?
希望帮助;祝你好运!
这就是我正在寻找的,我只是想知道,为什么 声明函数Person():void; let peter:any = new Person() 不起作用。 – skizofre3e