TypeScript 泛型错误:类型上不存在属性

Gre*_*een 0 generics typescript

为什么 TS 会为此代码抛出错误?我已经定义了一个interface Argswithlength属性,但它仍然抛出:

interface Args {
  length: number
}

function log<Args>(arg: Args): Args {
  console.log(arg.length); // <= why length doesn't exist?
  return arg;
}


$  tsc index.ts

index.ts:11:19 - error TS2339: Property 'length' does not exist on type 'Args'.
11   console.log(arg.length);
                 ~~~~~~
Run Code Online (Sandbox Code Playgroud)

Tit*_*mir 8

随着<Args>你要定义一个泛型类型参数(一个可以是任何类型)。您可以使用约束定义类型参数:

interface Args {
    length: number
}

function log<T extends Args>(arg: T): T {
  console.log(arg.length); 
  return arg;
}
Run Code Online (Sandbox Code Playgroud)

或者你可以完全省略类型参数(取决于你想要做什么)

interface Args {
  length: number
}

function log(arg: Args): Args {
  console.log(arg.length); 
  return arg;
}  
Run Code Online (Sandbox Code Playgroud)