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”。要解决该错误,请在调用函数时提供参数或将参数标记为可选。