我有这个代码部分,非常简单:
interface A {
z: string;
y: number;
}
let newA = <T, S extends keyof T>(key: S, value: T[S]): Partial<T> => {
return {[key]: value};
}
Run Code Online (Sandbox Code Playgroud)
我看到一条错误消息:
Type '{ [x: string]: T[S]; }' is not assignable to type 'Partial<T>'
我可以假设问题与 相关{},它总是映射key为string
但即使有明确的类型说那应该是string我没有结果
只有一种可行的解决方案是删除Partial<T>,但这不是一个好的解决方案
希望能从一些专家级的typescript人那里得到一些答案,他们可以描述该问题的机制,并得到这种情况的解决方案
笔记!该问题仅与一般情况有关。没有这个一切都会好起来的。
我试图在我的Angular&Nativescript项目中使用Apache Thrift,但是通过'tns Preview --bundle'或任何其他tns命令,我得到了
TypeError: Cannot read property 'browser' of undefined
File: "<unknown>, line: 1, column: 265
Run Code Online (Sandbox Code Playgroud)
Apache Thrift版本0.11.0 / 1.0.0dev,Angular版本7.1.0,Nativescript版本5.1.0
在platform / android / app / src / main / assets / app / vendor.js中,我可以看到:
/* istanbul ignore next */
if (undefined.browser) {
defaultEncoding = 'utf-8'
} else {
var pVersionMajor = parseInt(undefined.version.split('.')[0].slice(1), 10)
Run Code Online (Sandbox Code Playgroud)
当我期望类似之类的东西时global.process.browser,我可以在vendor.js中找到另一种平静。在另一个平静中,我可以看到类似的东西undefined.nextTick(...)。我知道这是某种巴别塔问题,但我不知道如何解决。
我使用thrift --gen js:node脚本生成我的节俭文件(错误没有意义)。没有它们,所有的作品都很酷,但是后来我试图从Thrift执行任何Thrift生成的文件/任何模块,我在上面遇到了一个异常。my_component.ts
import { Component, OnInit } from '@angular/core';
import { TJSONProtocol } from 'thrift'; // or …Run Code Online (Sandbox Code Playgroud) 我有一些接口,它有一个枚举字段。还想为此接口进行重载,这将在某些特定枚举值的情况下再采用一个属性。
举个例子:
enum CellValueType {
DATE,
STRING,
NUMBER
}
export interface TableCell {
type: CellValueType;
value: string; // ...
}
export interface TableCell {
type: CellValueType.DATE;
format: string; // Should be exist only on the DATE type
value: string; // ...
}
Run Code Online (Sandbox Code Playgroud)
但是,问题是使用接口时出现错误:
后续的属性声明必须具有相同的类型。属性“type”必须是“CellValueType”类型,但此处的类型是“CellValueType.DATE”。
错误是可以理解的,没有疑问。
主要问题是如何通过合法途径避免这种情况的发生。
我知道,我可以使用type而不是interface得到这个结构:
export type TableCell = {
type: CellValueType;
value: string;
} | {
type: CellValueType.DATE;
format: string;
value: string;
}
Run Code Online (Sandbox Code Playgroud)
工作得很好,但问题是类无法实现联合类型。
未按预期工作,但DATE仍与第一个签名兼容。为了正确工作,需要将其type: CellValueType更改为type: Exclude<CellValueType, …