Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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
Javascript 类型脚本错误:;类型';编号';不可分配给类型';绝不';_Javascript_Typescript - Fatal编程技术网

Javascript 类型脚本错误:;类型';编号';不可分配给类型';绝不';

Javascript 类型脚本错误:;类型';编号';不可分配给类型';绝不';,javascript,typescript,Javascript,Typescript,您可以在TS操场上检查错误: typescript:v3.8.3 err:Type'number'不可分配给Typenever。 我不明白为什么它是一个从不类型。如果在属性访问之后将作为任何放置,则TypeScript将检查键是否为有效键 interface Opts { onFrame: () => void; onAudioSample: null; emulateSound: boolean; sampleRate: number; } class NES {

您可以在TS操场上检查错误:

typescript:v3.8.3
err:Type'number'
不可分配给Type
never

我不明白为什么它是一个
从不
类型。

如果在属性访问之后将
作为任何
放置,则TypeScript将检查
是否为有效键

interface Opts {
  onFrame: () => void;
  onAudioSample: null;
  emulateSound: boolean;
  sampleRate: number;
}

class NES {
    constructor(opts: Opts) {
        this.opts = {
            onFrame() { },
            onAudioSample: null,
            emulateSound: true,
            sampleRate: 44100,
        }

        if (typeof opts !== "undefined") {
            let key: keyof Opts
            for (key in this.opts) {
                if (typeof opts[key] !== "undefined") {
                    // got err here
                    this.opts[key] = opts[key];
                }
            }
        }
    }
    opts: Opts
}

如果将
作为任何
放在属性访问之后,TypeScript将检查
是否为有效键

interface Opts {
  onFrame: () => void;
  onAudioSample: null;
  emulateSound: boolean;
  sampleRate: number;
}

class NES {
    constructor(opts: Opts) {
        this.opts = {
            onFrame() { },
            onAudioSample: null,
            emulateSound: true,
            sampleRate: 44100,
        }

        if (typeof opts !== "undefined") {
            let key: keyof Opts
            for (key in this.opts) {
                if (typeof opts[key] !== "undefined") {
                    // got err here
                    this.opts[key] = opts[key];
                }
            }
        }
    }
    opts: Opts
}

我不知道你为什么会犯这样的错误。合并这两个选项的另一种方法可能是使用排列运算符

if (typeof opts[key] !== "undefined") {
  (this.opts[key] as any) = opts[key];
}

我不知道你为什么会犯这样的错误。合并这两个选项的另一种方法可能是使用排列运算符

if (typeof opts[key] !== "undefined") {
  (this.opts[key] as any) = opts[key];
}

之所以出现此错误,是因为TypeScript无法推断
this.opts[key]
opts[key]
是同一类型。如果您要覆盖每一半的
=

  • 选择[键]
    可以是
    函数
    空值
    布尔值
    、或
    数字
  • this.opts[key]
    需要接收一个
    函数
    null
    布尔值
    数字
    取决于我们不知道的
    键的值
  • 函数
    布尔
    数字
    的唯一共同超类型是
    从不
    , 这就是TypeScript想要的
    this.opts[key]
有趣的是,如果要将其提取到一个匿名泛型函数中,它是有效的:在单个赋值中,Typescript可以推断并使用类型
Opts[K]
。提出了类似的解决方案

if(选项的类型[键]!=“未定义”){
//this.opts[key]=opts[key];
((k:k)=>{this.opts[k]=opts[k];})(键);
}

也就是说,我将使用中的扩展运算符,用
…opts
结束对
this.opts
的赋值,或者使用
Object.assign
。传递的
opts
包含额外键的风险很小,但是Typescript应该在编译时确保不包含额外键。(就此而言,如果您希望
opts
是可选的且可能不完整,则可能应将其定义为
opts?:Partial

类{
构造函数(选项?:部分){
this.opts=Object.assign({
onFrame(){},
onAudioSample:null,
真的,,
采样器:44100,
},opts);
}
选项:选项
}

另请参见:,其中指出解决方案非常相似,并且都适用于默认选项值。

由于TypeScript无法推断
这一点,因此您会遇到该错误。opts[key]
opts[key]
是同一类型。如果您要覆盖每一半的
=

  • 选择[键]
    可以是
    函数
    空值
    布尔值
    、或
    数字
  • this.opts[key]
    需要接收一个
    函数
    null
    布尔值
    数字
    取决于我们不知道的
    键的值
  • 函数
    布尔
    数字
    的唯一共同超类型是
    从不
    , 这就是TypeScript想要的
    this.opts[key]
有趣的是,如果要将其提取到一个匿名泛型函数中,它是有效的:在单个赋值中,Typescript可以推断并使用类型
Opts[K]
。提出了类似的解决方案

if(选项的类型[键]!=“未定义”){
//this.opts[key]=opts[key];
((k:k)=>{this.opts[k]=opts[k];})(键);
}

也就是说,我将使用中的扩展运算符,用
…opts
结束对
this.opts
的赋值,或者使用
Object.assign
。传递的
opts
包含额外键的风险很小,但是Typescript应该在编译时确保不包含额外键。(就此而言,如果您希望
opts
是可选的且可能不完整,则可能应将其定义为
opts?:Partial

类{
构造函数(选项?:部分){
this.opts=Object.assign({
onFrame(){},
onAudioSample:null,
真的,,
采样器:44100,
},opts);
}
选项:选项
}

另请参见:,其中指出,解决方案非常相似,都适用于默认选项值。

如果这样做,则不需要使用“as Opts”强制转换,对吗?在本例中为True,因为实例变量是在构造函数外部键入的。如果这样做,那么使用'as Opts'强制转换是不必要的,对吗?在这种情况下是正确的,因为实例变量是在构造函数之外键入的。谢谢,您的解决方案很好,我使用类型断言解决了它,似乎您的解决方案更好。我的解决方案:(this.Opts[key]as Opts[typeof key])=Opts[key]谢谢,您的解决方案很好,我用类型断言解决了它,似乎你的解决方案更好。我的解决方案:(this.opts[key]as opts[typeof key])=opts[key]