Typescript 有人知道怎么打字吗?

Typescript 有人知道怎么打字吗?,typescript,Typescript,我不知道如何键入:这会产生很多错误 // This seems all wrong as it just creating more errors interface Response { status: number; statusText: string; error: Error } /* // TS7053: Element implicitly has an 'any' type because expression of type '"text&

我不知道如何键入:这会产生很多错误

// This seems all wrong as it just creating more errors
interface Response {
  status: number;
  statusText: string;
  error: Error
}

/*
  // TS7053: Element implicitly has an 'any' type because expression 
    of type '"text" | "json"' can't be used to index type 'Response'.         Property 'text' does not exist on type 'Response'
*/ 
function parseResponse(response) {
  return response[response.status === 204 ? 'text' : 'json']();
}

function checkStatus(response) {
  if (response && response.status >= 200 && response.status < 300) {
    return response;
  }

  const error = new Error(response ? response.statusText : 'Offline');
  error.response = response; // TS2339: Property 'response' does not exist on type 'Error'.
  throw error;
}

显示错误:TS7053:元素隐式具有“any”类型,因为类型为“Auth Token”的表达式不能用于索引类型“{Accept:string;}”。属性“Auth Token”在类型“{Accept:string;}”上不存在。

您需要进一步定义类型,Typescript编译器可以从代码中智能地推断类型,但它需要一些帮助:

function parseResponse(response:Response) {
  return response[response.status === 204 ? 'text' : 'json']();
}
您可以从response访问成员“text”或“json”,我假设它具有response类型。但是类型响应没有成员文本或json。既然您正在调用表达式,我假定它一定是某种函数。这个接口的定义将使它可以编译(尽管我不知道函数可能是什么):

请注意,当然,在运行时扩展接口而不实际提供该函数的任何实现是行不通的

守则:

   const error = new Error(response ? response.statusText : 'Offline');
   error.response = response; // TS2339: Property 'response' does not exist on type 'Error'.
   throw error;

您必须定义类错误,否则编译器会抱怨,它知道的错误类没有成员“response”

您需要更多地定义类型,Typescript编译器可以从代码中智能地推断类型,但它需要一些帮助:

function parseResponse(response:Response) {
  return response[response.status === 204 ? 'text' : 'json']();
}
您可以从response访问成员“text”或“json”,我假设它具有response类型。但是类型响应没有成员文本或json。既然您正在调用表达式,我假定它一定是某种函数。这个接口的定义将使它可以编译(尽管我不知道函数可能是什么):

请注意,当然,在运行时扩展接口而不实际提供该函数的任何实现是行不通的

守则:

   const error = new Error(response ? response.statusText : 'Offline');
   error.response = response; // TS2339: Property 'response' does not exist on type 'Error'.
   throw error;

您必须定义类错误,否则编译器会抱怨,它知道的错误类没有成员“response”

response
是一种已经全局存在的类型。你不应该把一切都定义清楚。只要使用它:

function parseResponse(response: Response) { /* ... */ }
function checkStatus(response: Response) { /* ... */ }

对于第二个问题,如果要添加对错误的响应,则默认情况下该属性不存在。您可能希望子类化
Error
,添加属性,然后实例化特定的Error类

class ResponseError extends Error {
    response?: Response
}

function checkStatus(response: Response) {
  if (response && response.status >= 200 && response.status < 300) {
    return response;
  }

  const error = new ResponseError(response ? response.statusText : 'Offline');
  error.response = response;
  throw error;
}


为了让第三个示例正常工作,您可能只想将
头声明为允许任何字符串作为键的类型。然后在请求选项中使用该对象

const headers: { [name: string]: string } = {
    Accept: 'application/json',
}
const requestOptions = {
    credentials: 'include',
    headers,
}

requestOptions.headers['Auth-Token'] = 'abc123';

响应
是一种已在全球范围内存在的类型。你不应该把一切都定义清楚。只要使用它:

function parseResponse(response: Response) { /* ... */ }
function checkStatus(response: Response) { /* ... */ }

对于第二个问题,如果要添加对错误的响应,则默认情况下该属性不存在。您可能希望子类化
Error
,添加属性,然后实例化特定的Error类

class ResponseError extends Error {
    response?: Response
}

function checkStatus(response: Response) {
  if (response && response.status >= 200 && response.status < 300) {
    return response;
  }

  const error = new ResponseError(response ? response.statusText : 'Offline');
  error.response = response;
  throw error;
}


为了让第三个示例正常工作,您可能只想将
头声明为允许任何字符串作为键的类型。然后在请求选项中使用该对象

const headers: { [name: string]: string } = {
    Accept: 'application/json',
}
const requestOptions = {
    credentials: 'include',
    headers,
}

requestOptions.headers['Auth-Token'] = 'abc123';

我以为有一般错误类型?我以为有一般错误类型?你能看到我的附录吗。。我添加了另一个我有问题的项目,你能看一下吗?这是标题位。我试图添加全局标题,但没有成功我仍在学习TS的代码库,需要从legacy更新为TS。如果我有问题,我可以放松一下。。每个问题2美元,哈哈。每次我都会问你!!!不错的交易!!lololol:-)赚200美元,我会考虑:)但将遗留JS升级到typescript可能会很困难,特别是当代码只是随机添加属性时。我不建议这样学习打字脚本。相反,我建议你开始一个新项目,边做边学,强迫自己永远不要用
any
作为任何东西的类型。。将此代码库更新为typescript:-(你能看到我的补遗吗?。我添加了另一个我有问题的项目,你能快速看一下吗?是标题位。我试图添加全局标题,但不起作用。我仍在学习TS的代码库,需要从legacy更新为TS。如果我有问题,我会放松你的。每个问题是$2,lol。我每次都会向你发问!!!这是一笔不错的交易!!洛洛尔:-)赚200美元,我会考虑:)但将遗留JS升级到typescript可能会很困难,特别是当代码只是随机添加属性时。我不建议这样学习打字脚本。相反,我建议你开始一个新项目,边做边学,强迫自己永远不要用
any
作为任何东西的类型。。将此代码库更新为typescript:-(