首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >欺骗类型记录编译器将错误接口分配给变量。

欺骗类型记录编译器将错误接口分配给变量。
EN

Stack Overflow用户
提问于 2017-06-09 10:08:02
回答 1查看 67关注 0票数 0

我试图通过滥用类型记录来强制执行自定义类型规则。我让它与类一起工作,但是我在接口方面遇到了困难。下面是工作的类版本:

代码语言:javascript
复制
export class HeaderElement extends WebElement { 
  // 'dummy' type: won't create any instances of it at runtime.
  // type-filler member that doesn't exist in other WebElement.
  _HEADER_ELEMENT_TYPE_FILLER_6897689FSAFDSF: string; 
  //  -> dummy member: not even read/written/set in code.
}
const export function getHeaderElement(): HeaderElement {
  // findElement: returns WebElement type
  const header = browser.findElement( ... );
  return header as HeaderElement; 
  // **tricking typescript (actual runtime type would be 'WebElement')**
}
export function clickWowPageMenu(
  headerElem: HeaderElement
  // (headerElem's runtime-type is WebElement. 
  // It's 'HeaderElem' only in compilation phase.)
) { ... }
const headerElem = getHeaderElement();
const saveButtonElem = getSaveButtonElement();
clickWowPageMenu( headerElem ); // ok
clickWowPageMenu( saveButtonElem ); // type-error.

但是对于接口版本,以下代码会导致类型记录类型错误:

代码语言:javascript
复制
interface IContext {
   __EXTENDS_IContextElem123124: string,
}
interface IChatContext extends IContext {
   name: string,
}
const test: IChatContext = { name: 'namehere' } as IChatContext;
// want: no type error here. (but 'missing __EXTENDS_IContextElem123124')
const test2: IChatContext = {} as IChatContext;
// want: type error here. (missing property 'name')

我如何“滥用”类型记录,以我想要的方式输入检查界面?或者还有别的办法(如。官方的)?

谢谢!

代码语言:javascript
复制
const test: IContextElem ... --> IContext
  1. 添加缺失的详细信息(想要/不想要)
EN

回答 1

Stack Overflow用户

发布于 2017-06-09 10:42:44

TypeError是正确的,因为您使用的是IContextElem而不是IContext

更改后,示例将在游乐场中再次编译。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44455020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档