TypeScript 如何修复错误TS1015:参数不能有问号和初始化程序

TypeScript 如何修复错误TS1015:参数不能有问号和初始化程序

在本文中,我们将介绍如何修复 TypeScript 中的错误 TS1015,该错误指出参数不能同时具有问号和初始化器。

阅读更多:TypeScript 教程

错误信息

当我们在 TypeScript 代码中定义一个函数或方法的参数时,有时候希望该参数是可选的,并可以有默认值。因此我们可能会尝试在参数声明时使用问号和初始化器。例如:

function greet(name?: string = "guest") {
    console.log(`Hello, ${name}!`);
}

然而,当我们尝试编译这段代码时,TypeScript 编译器会报错 TS1015,指出参数不能同时具有问号和初始化器。

错误信息如下所示:

error TS1015: Parameter cannot have question mark and initializer.

问题分析

该错误是由 TypeScript 的参数声明语法规则引起的。参考 TypeScript 的官方文档,我们可以了解到参数声明可以有以下几种形式:

  • 必需参数:param: type
  • 可选参数:param?: type
  • 默认初始化器:param = value

上述三种形式可以单独使用,但不能同时混合使用。因此,在函数或方法的参数声明中,不能同时使用问号和初始化器。

解决方法

要修复 TS1015 错误,我们需要根据参数的需求,在问号和初始化器之间选择一种方式,而不能同时出现。

  • 如果我们希望参数是可选的,并允许传入 undefined 或 null 值,那么我们应该使用问号来标记该参数:
function greet(name?: string) {
    console.log(`Hello, ${name || "guest"}!`);
}

在上述修复方案中,我们没有使用初始化器,而是在函数体内部对参数进行了默认值的处理。当参数传入 undefined 或 null 值时,我们使用了逻辑或运算符 ||,将其替换为默认值 “guest”。

  • 如果我们希望参数是可选的,并希望它有一个默认值,我们应该使用默认初始化器:
function greet(name: string = "guest") {
    console.log(`Hello, ${name}!`);
}

在上述修复方案中,我们去掉了问号,并在参数声明时使用了初始化器。这样,在调用函数时,如果不传入该参数,它将使用默认值 “guest”。

示例说明

让我们来看一个更复杂的示例,以演示 TS1015 错误的修复方法。

假设我们正在编写一个购物车应用,其中有一个函数用于计算购物车中所有商品的总价格。该函数的参数为商品数组,而该参数是可选的,并且有一个默认值为空数组。

function calculateTotalPrice(products: Product[] = []): number {
    let totalPrice = 0;
    for (const product of products) {
        totalPrice += product.price;
    }
    return totalPrice;
}

interface Product {
    name: string;
    price: number;
}

const products: Product[] = [
    { name: "Apple", price: 2 },
    { name: "Banana", price: 1 },
];

console.log(calculateTotalPrice(products)); // 输出 3
console.log(calculateTotalPrice()); // 输出 0

在上述示例代码中,我们定义了一个 calculateTotalPrice 函数,它的参数 products 是可选的,并具有一个默认初始化器。在该函数的实现中,我们计算了购物车中所有商品的总价格,并将其返回。

我们还定义了一个 Product 接口来描述商品的类型,以便在示例代码中使用。

在示例代码的末尾,我们调用了 calculateTotalPrice 函数两次。第一次调用传入了一个商品数组,第二次调用没有传入任何参数。在第二次调用中,由于没有传入参数,函数会使用默认的空数组作为参数,并输出 0。

总结

在 TypeScript 中,参数不能同时具有问号和初始化器。这是由 TypeScript 的参数声明语法规则决定的。要修复 TS1015 错误,我们需要选择问号或初始化器之一,而不能同时使用。

  • 如果参数是可选的,并允许传入 undefined 或 null 值,应该使用问号进行标记,并在函数体内部进行默认值处理。
  • 如果参数是可选的,并希望给它一个默认值,应该使用初始化器进行设置。

通过遵循上述规则,并根据参数的需求进行选择,我们可以成功修复 TS1015 错误,并编写出高质量的 TypeScript 代码。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程