TypeScript 中未提供“X”的参数

TypeScript 中没有提供 ‘x’ 的参数

An argument for ‘X’ was not provided in TypeScript

当我们在调用函数或类方法时没有为必需的参数提供值时,会出现错误“An argument for ‘X’ was not provided”。要解决该错误,请在调用函数时提供参数或将参数标记为可选。

未提供参数

以下是错误发生方式的 2 个示例。

索引.ts
class Employee { constructor(public name: string, public salary: number) { this.name = name; this.salary = salary; } } // ⛔️ Error: Expected 2 arguments, but got 1.ts(2554) // index.ts(2, 36): An argument for 'salary' was not provided. const employee = new Employee('James'); // ------------------------------------------------------------ function sum(a: number, b: number) { return a + b; } // ⛔️ Error: index.ts(12, 25): An argument for 'b' was not provided. console.log(sum(15));

第一个示例中的问题是 – 该类有 2 个必需参数,但我们在实例化时只向它传递了一个参数。

第二个例子中的函数也需要 2 个参数,但我们只提供了 1 个。

解决错误的一种方法是为所有必需的参数提供一个值。

索引.ts
class Employee { constructor(public name: string, public salary: number) { this.name = name; this.salary = salary; } } // ✅ works now const employee = new Employee('James', 100); // ------------------------------------------------------------ function sum(a: number, b: number) { return a + b; } // ✅ works now console.log(sum(15, 25)); // 👉️ 40

或者,如果您想在调用函数时忽略某个参数,则可以将其标记为可选。

索引.ts
class Employee { // 👇️ mark `salary` as optional constructor(public name: string, public salary?: number) { this.name = name; this.salary = salary; } } const employee = new Employee('James'); console.log(employee.salary); // 👉️ undefined // ------------------------------------------------------------ // 👇️ mark `b` as optional function sum(a: number, b?: number) { return a + (b || 0); } console.log(sum(15)); // 👉️ 15

我们使用问号将函数参数标记为
可选

这意味着该参数可以是指定类型,也可以是. undefined

这种方法允许我们在调用函数时不传递参数。

如果您想在调用函数时省略它,您还可以为函数参数指定一个默认值。
索引.ts
class Employee { // 👇️ provide a default value for the `salary` parameter constructor(public name: string, public salary: number = 100) { this.name = name; this.salary = salary; } } const employee = new Employee('James'); console.log(employee.salary); // 👉️ 100 // ------------------------------------------------------------ // 👇️ provide a default value for the `b` parameter function sum(a: number, b = 100) { return a + (b || 0); } console.log(sum(15)); // 👉️ 115

请注意,我们甚至不必b在函数中显式键入参数
sum

TypeScript 能够根据提供的默认值推断其类型。

但是,如果您为数组或对象参数提供默认值,则必须显式键入它们。

索引.ts
function getNames(names: string[] = []) { return names; } console.log(getNames()); // 👉️ [] console.log(getNames(['Alice', 'Bob'])); // 👉️ ['Alice', 'Bob']

names即使我们为它设置了默认值,我们还是明确地键入了参数。

这是因为如果您提供一个空数组作为默认值,TypeScript 会将参数的类型推断为never[],这是一个永远不会包含任何元素的数组。

结论

当我们在调用函数或类方法时没有为必需的参数提供值时,会出现错误“An argument for ‘X’ was not provided”。要解决该错误,请在调用函数时提供参数或将参数标记为可选。