TypeScript 使用 Interface 与 Class 的默认值细节

date
Mar 13, 2020
slug
itbjuiqq
status
Published
tags
TypeScript
summary
type
Post
 
最近编写 Modal,犯下一个错误:把接口返回的数据,直接丢到数据模型中:
notion image
address: new Array(5).fill(new Address()),
然后循环 address 显示时,每个属性居然都是 undefined
notion image
才发现 Modal 里那种写法不是默认值,而是定义的字面量类型(Literal Type):
type A = 38;
const c: A = 38; // ok
// const c: A = 28; // error

const g: "github" = "github"; // ok
// const g: 'github' = 'pithub'; // error
const gg: 1 = 1;
同样,在 interface 和 class 里
export interface ITest {
  a: 28; // ok,定义字面量类型
  // b = 28; // error,interface里不支持=
}

const a: ITest = { a: 28 };
a.a = 28; // ok
a.a = 38; // error

export class CTest {
  a: 28; // ok,定义字面量类型
  b = 28; // ok,自动推导是number类型,且默认值是28
}

let b: CTest = { a: 38, b: 38 };
b.a = 48; // error
b.b = 48; // ok
所以以后,切记不要偷懒。
  • interface 就使用 string、number 等基础类型
  • class 使用=去设置默认值,让其自动推导类型

© 刘德华 2020 - 2023