惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
M
MIT News - Artificial intelligence
MyScale Blog
MyScale Blog
博客园_首页
G
Google Developers Blog
博客园 - 【当耐特】
美团技术团队
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
Vercel News
Vercel News
小众软件
小众软件
博客园 - 司徒正美
雷峰网
雷峰网
T
Tailwind CSS Blog
V
V2EX
博客园 - 三生石上(FineUI控件)
F
Fortinet All Blogs
罗磊的独立博客
量子位
P
Proofpoint News Feed
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog

TypeScript

Bun 1.4,安卓平板可玩性大提升? - V2EX ts 生态有没有开源的简单的 kv 配置管理项目 你们是怎么学习 typescript 的? 用 Go 移植的 TypeScript 7 要来了 TypeScript5.9,仿佛走出草原来到了现代社会 Typescript 有没有能对接 AI 的知识库或者文档?能处理稍微复杂点的类型 typescript 如何返回一个动态对象类型 ts 有没有直接能查看最终类型的方法 TypeScript Native 预览版发布了 你们 typescript 用自带枚举还是字符串枚举,感觉字符串枚举类型用起来有点不可靠啊 effect-ts typescript 达人乱入 TypeScript 宣布原生移植计划,性能将提升 10 倍? #笔记#更好的 ts 重载声明方法 使用 satisfies 实现穷举类型保护 请教一个 TS 问题,不知能否实现 装饰器能不能装饰类的所有方法 TypeSciprt 类型推断,如何进一步收窄类型? TypeScript 项目打包发布到 npm,如何给方法和接口添加 dts TypeScript 类型推导真强大。 为啥下面这段代码 TS 不报错 ts 类型约束+请求参数校验+自动生成 openapi/swagger 文档,这三者目前有整合为一体的最佳实践吗 TypeScript 能不能别这么古怪,这行为什么会报错呢? 怎么每次碰到想不通的代码行都出在 TypeScript😢 这行到底哪里有问题? 低估了 typescript 的难度 前端写 nestjs 后端,用 TypeORM 时感到非常困惑,不知道是不是我的理解有问题 我列举了市面上最好的几个 TypeScript 教程, 想深入学习 TypeScript 的同学以后不用走弯路了 这样的函数类型定义在 ts 里面叫什么? typescript 如何忽略泛型参数啊? TypeScript 现在的应用场景
关于 TypeScript 装饰器和接口的问题,请教一下各位
DreamingCTW · 2025-04-03 · via TypeScript

我是做 Java 后端的,这两天正在系统化的学习 ts ,学到装饰器的时候,有点疑惑,希望可以指导下,谢谢大家。以下是 Demo

type Constructor = new (...args: any[]) => {};

function LogTime<T extends Constructor>(target: T) {
  return class extends target {
    createTime: Date;
    constructor(...args: any[]) {
      super(...args);
      this.createTime = new Date();
    }
    getCreateTime() {
      return `该对象的创建时间是:${this.createTime}`;
    }
  };
}

@LogTime
class Person {
  name: string;
  age: number;
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

interface Person {
  getCreateTime(): void;
}

const person = new Person("小明", 18);
console.log(person.getCreateTime());

如果不声明 interface Person { getCreateTime(): void },那么 person.getCreateTime()会报错,提示 Person 对象中没有这个属性。加上这个接口就不会报错了,但有一个问题,接口中规范了 getCreateTime()函数的返回值为 void ,实际上装饰器中 getCreateTime()返回的是 string ,这不矛盾吗?我尝试修改接口中的 getCreateTime()函数的返回值,发现改成任意类型都可以...

现在给我的感觉就是,为了让 person.getCreateTime()代码不报错,就打了 interface Person 这个补丁,而且可以不强制遵循这个补丁的规范。

由此我想到了另一个问题,从上述代码看,Person 既是一个 class ,也是一个 interface ,我还可以创建一个新的 class 来 implements Person ,发现 class Person 中的所有属性也都要实现,所以 interface Person 是把 class Person 转成了接口?

class NewPerson implements Person {
  name: string;
  age: number;
  createTime: Date;
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
    this.createTime = new Date();
  }
  getCreateTime() {
    return `该对象的创建时间是:${this.createTime}`;
  }
}