📌  相关文章
📜  类型“T”上不存在属性“长度”-TypeScript (1)

📅  最后修改于: 2023-12-03 14:56:45.011000             🧑  作者: Mango

TypeScript 错误:类型“T”上不存在属性“长度”

在 TypeScript 中,有时候我们会遇到这个错误:

类型“T”上不存在属性“长度”。

这个错误通常表示我们在代码中使用了一个不支持 length 属性的类型变量 T

错误示例

以下代码会出现上面的错误:

function printLength<T>(input: T): void {
  console.log(input.length);
}

printLength("hello"); // 错误:类型“string”上不存在属性“长度”。
解决方法
1. 添加类型约束

我们可以添加类型约束来让 TypeScript 知道 T 支持 length 属性。

interface Lengthwise {
  length: number;
}

function printLength<T extends Lengthwise>(input: T): void {
  console.log(input.length);
}

printLength("hello"); // 输出 5

在上面的例子中,我们定义了一个接口 Lengthwise 来描述所有支持 length 属性的类型。同时,我们使用泛型约束 T extends Lengthwise 来限制输入的类型必须符合 Lengthwise 接口定义。

2. 检查类型变量

如果我们无法使用一个已知的接口来约束输入类型,那么我们需要检查类型变量的定义以确保它支持 length 属性。

function printLength<T>(input: T): void {
  if (typeof input === "string") {
    console.log(input.length);
  } else if (Array.isArray(input)) {
    console.log(input.length);
  } else {
    console.log("Unsupported type");
  }
}

printLength("hello"); // 输出 5
printLength([1, 2, 3]); // 输出 3
printLength({ name: "Tom" }); // 输出 "Unsupported type"

在上面的例子中,我们使用 typeofArray.isArray 来检查输入类型,然后分别处理它们的 length 属性。如果输入类型不是一个字符串或数组,我们在控制台输出 "Unsupported type"。