Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
欺骗typescript编译器为变量分配错误的接口_Typescript_Typescript2.0 - Fatal编程技术网

欺骗typescript编译器为变量分配错误的接口

欺骗typescript编译器为变量分配错误的接口,typescript,typescript2.0,Typescript,Typescript2.0,我试图通过滥用typescript来强制执行自定义类型规则。 我已经让它与类一起工作,但是我在为接口工作时遇到了麻烦。 以下是有效的类版本: 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.

我试图通过滥用typescript来强制执行自定义类型规则。 我已经让它与类一起工作,但是我在为接口工作时遇到了麻烦。 以下是有效的类版本:

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.
但对于interfaces版本,以下代码会导致typescript类型错误:

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')
如何“滥用”typescript以我想要的方式键入检查接口?还是有别的办法(如官方的)

谢谢大家!

----------------编辑--------- 1.对不起,打错了

const test: IContextElem ... --> IContext
  • 添加缺少的详细信息(想要/不想要)

  • 类型错误是正确的,因为您使用的是
    icontextlem
    ,而不是
    IContext


    更改后,您的示例将在

    中再次编译,是吗?我想你的也行。。。但我有错误,说“\uuuuExtends\uIContextelem\uType\uFiller123124在IContextElem上不存在”,但是……它们不见了!等待您的解决方案可以使用:
    const test:IChatContext={}作为IChatContext
    。。。所以我想那不是我想要的100%。。。很抱歉