繁体   English   中英

typescript 中的功能

[英]Functions in typescript

为什么没有遗漏错误?

interface User {
  // way 1
  foo(): string;  
  foo2(x:number): string; 

  // way 2
  normal: () => string;
  normal2: (x:number) => string;
}

let user: User = {
  // way 1
  foo: () => '',
  foo2: () => '', // why no error since x is missing
  
  // way 2
  normal: () => '',
  normal2: () => '', // why no error since x is missing
};

看到这个 Typescript 游乐场

只要它的返回类型兼容并且存在的参数兼容,可以将较低数量的 function 分配给更高数量的 function。

在您的情况下,因为函数没有参数并返回string ,所以它们是兼容的。

TS游乐场

type NumFn = (n: number) => string;
declare const isCompatible: (() => string) extends NumFn ? true : false; // true

如果你调用(x:number)=>string而不传入x ,你会得到An argument for 'x' was not provided. 错误。

但这不是你在做什么

您正在做的是将()=>string分配给(x:number)=>string ,这是有效的。 当您将()=>string分配给(x:number)=>string时,编译器会询问: ()=>string的行为是否与(x:number)=>string相同?

即可以()=>string接受一个number并吐出一个string ,就像(x:number)=>string一样吗?

答案是肯定的, ()=>string在技术上可以接受任何数字,但只是忽略它,然后返回一个字符串,与它接受的数字无关。因此, ()=>string可分配给(x:number)=>string

就像上面的答案似乎只有在没有 arguments 的情况下调用 function 时才能检测到它,我敢打赌这与 typescript 上下文类型有关(我也在学习这里)

Function 参数一次检查一个,每个对应参数 position 中的类型相互检查。 如果您根本不想指定类型,TypeScript 的上下文类型可以推断参数类型,因为 function 值直接分配给 SearchFunc 类型的变量。 在这里,我们的 function 表达式的返回类型也隐含在它返回的值typescript 手册中

interface Counter {
  (start: number): string;
  interval: number;
  foo: (x:number) => string;
  bar(x:number):string;
  reset(): void;
}

function getCounter(): Counter {
  let counter = function (s...

游乐场链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM