使用 Javascript 对象的打字稿
Posted
技术标签:
【中文标题】使用 Javascript 对象的打字稿【英文标题】:Typescript to use Javascript object 【发布时间】:2018-03-06 13:14:11 【问题描述】:我正在通过 Node.js 进行开发。 我在 javascript 文件中有以下对象
function Person
this.name = 'Peter',
this.lastname = 'Cesar',
this.age = 23
我想在我的 Typescript 代码中实例化这个对象:
let peter: any = new Person();
但是我得到“找不到名称'Person'”这很正常,因为我需要在之前为函数定义签名。我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:用这个代替人物功能:
export class Person
name:string = 'Peter';
lastname:string = 'Cesar';
age:number = 23
【讨论】:
我想将它用作外部 JS ,如果我这样做意味着它已经是代码的一部分。我认为我需要做的是定义函数的签名,或者打字【参考方案2】:是的,我认为您需要做的是“声明”该功能。
declare function Person(): void;
您可以在官方文档中阅读“声明”。
【讨论】:
【参考方案3】:答案是@TomKunzemann 和@GauravSrivastava 的答案的混合:您应该将declare
它作为class
。
使用declare
,您只是告诉编译器该类型的形状和行为而不实现它,因此它依赖于您的 JavaScript 中包含的环境 Person
函数。
对于class
,您是在告诉 TypeScript,这是您使用 new
实例化的那种东西。
最后,您可能不想将peter
定义为any
类型,否则TypeScript 之后不会对其进行类型检查。如果你不使用: any
,TypeScript 会推断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'"?
希望有所帮助;祝你好运!
【讨论】:
【参考方案4】:所以首先我认为你的 vanilla 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对象
【讨论】:
好工作就是我要找的,我只是想知道,为什么要声明函数 Person(): void; let peter: any = new Person() 不起作用。以上是关于使用 Javascript 对象的打字稿的主要内容,如果未能解决你的问题,请参考以下文章