提问人:Gabriel Atanasov 提问时间:11/5/2023 更新时间:11/5/2023 访问量:40
TypeScript:如何在类中拥有对象,然后在构造函数中使用它
TypeScript: How to have object within a class and then use it in constructor
问:
问题
我正在创建一个包含很多变量的类。它们中的大多数都是逻辑分组的,我想利用 IDE (VS Code) 自动建议的优势。
问题是有很多变量,我不想预先列出所有变量,我想有嵌套,所以如果我创建,那么当我开始键入 IDE 以启动第一级自动建议所有瘦身时,例如,...等。const movie1 = new Movie(1, 101);
movie1.
id
title
然后,当我进一步键入时,IDE会给我提示该对象具有,例如,,和。movie1.title
bg
en
original
实际结果
VS Code 给了我提示。但是当我运行脚本时,我收到运行时错误
this.id.googlesheet.row = rowID;
^
TypeError: Cannot read properties of undefined (reading 'googlesheet')
at Movie (~/src/classes/Movie.ts:12:17)
at <anonymous> (~/src/index.ts:5:16)
at Object.<anonymous> (~/src/index.ts:8:44)
at Module._compile (node:internal/modules/cjs/loader:1241:14)
at Object.j (~/dist/cjs/index.cjs:1:1197)
at Module.load (node:internal/modules/cjs/loader:1091:32)
at Module._load (node:internal/modules/cjs/loader:938:12)
at cjsLoader (node:internal/modules/esm/translators:283:17)
at ModuleWrap.<anonymous> (node:internal/modules/esm/translators:233:7)
at ModuleJob.run (node:internal/modules/esm/module_job:217:25)
我认为我从根本上做错了,我尝试使用接口,但我以死胡同告终。
文件
来源/index.ts
import { Movie } from "./classes/Movie";
const movieList: Movie[] = [];
const movie1 = new Movie(1, 101);
const movie2 = new Movie(2, 102);
console.log(movieList[0].id.googlesheet.row);
src/类/Movie.ts
export class Movie {
id: { googlesheet: { row: number; movie: number; }; wordpress?: { bg?: number; en?: number; }; };
title: { bg: string; en: string; original?: string; };
metadata: { duration: string; yearOfProduction: string; };
country: { bg: string; en: string; };
description: { bg: string; en: string; };
director: { bg: string; en: string; };
trailer: { url: string; };
featuredImage: { url: string; };
constructor(rowID: number, movieID: number) {
this.id.googlesheet.row = rowID;
this.id.googlesheet.movie = movieID;
}
}
答: 暂无答案
评论
this.id = {}; this.id.googlesheet = {}; // Or whatever
--strictPropertyInitialization
选项进行编译。这将捕获您在此处遇到的错误,实际上您尚未初始化您的属性。这是否完全解决了这个问题?如果是这样,我可以写一个答案来解释;如果没有,我错过了什么?