📅  最后修改于: 2023-12-03 14:56:45.011000             🧑  作者: Mango
在 TypeScript 中,有时候我们会遇到这个错误:
类型“T”上不存在属性“长度”。
这个错误通常表示我们在代码中使用了一个不支持 length
属性的类型变量 T
。
以下代码会出现上面的错误:
function printLength<T>(input: T): void {
console.log(input.length);
}
printLength("hello"); // 错误:类型“string”上不存在属性“长度”。
我们可以添加类型约束来让 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
接口定义。
如果我们无法使用一个已知的接口来约束输入类型,那么我们需要检查类型变量的定义以确保它支持 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"
在上面的例子中,我们使用 typeof
和 Array.isArray
来检查输入类型,然后分别处理它们的 length
属性。如果输入类型不是一个字符串或数组,我们在控制台输出 "Unsupported type"。